Credo che sia una questione di TypeConverter.
---EDIT---
No, ho fatto qualche esperimento e mi pare che non c'entri.
---EDIT2---
Trovato. In passato da quanto ne so veniva chiamato ToString, ma evidentemente l'hanno cambiato in VS2008 per evitare gli eventuali side-effects degli override di ToString. Puoi comunque utilizzare lo stesso valore restituito da ToString applicando l'attributo in questione come ho fatto qui:
codice:
Module Module1
<DebuggerDisplay("{ToString()}")> _
Class Test2
Public a As String
Public b As Integer
Public c As Double
Public Overrides Function ToString() As String
Return String.Format("{{{0};{1};{2}}}", a, b, c)
End Function
End Class
<DebuggerDisplay("{ToString()}")> _
Class Test
Public punto As System.Drawing.Point
Public test As Test2
Public Overrides Function ToString() As String
Return String.Format("{{{0};{1}}}", punto, test)
End Function
End Class
Sub Main()
Dim prova As New Test
prova.punto.X = 10
prova.punto.Y = 53
prova.test = New Test2()
prova.test.a = "ciao"
prova.test.b = 6
prova.test.c = 2.74
Console.WriteLine(prova)
End Sub
End Module