Sconsiglio vivamente l'uso di etichette e Goto, che rendono il blocco di codice poco leggibile e soprattutto non manifestano apertamente il ciclo che deve essere eseguito. 
Ad ogni modo, io ho creato nodi all'interno di un controllo TreeView in questo modo:
codice:
' Blocca l'aggiornamento visuale del controllo
demoTreeView.BeginUpdate()
Try
' Elimina tutti i nodi presenti nella struttura
demoTreeView.Nodes.Clear()
' Esegue un ciclo di nodi genitori
Dim i As Integer
For i = 1 To 100
Dim parentNode As TreeNode = New TreeNode(i.ToString())
demoTreeView.Nodes.Add(parentNode)
' Esegue un ciclo per i nodi figli
Dim j As Integer
For j = 1 To 10
Dim childNode As TreeNode = New TreeNode(j.ToString())
parentNode.Nodes.Add(childNode)
Next
Next
Finally
' Sblocca l'aggiornamento visuale del controllo
demoTreeView.EndUpdate()
End Try
Si tratta ovviamente di creare nodi non significativi, con valori di prova. A differenza del tuo codice, quando creo un nodo da aggiungere alla struttura, ne memorizzo il riferimento nella variabile parentNode: in questo modo, evito di ricercare nuovamente all'interno della struttura il nodo genitore per i nodi figli che mi sto accingendo a creare in modo analogo, i quali vengono poi inseriti nella proprietà Nodes del nodo padre parentNode.
Questo principio si applica bene però se i dati giungono ordinati e suddivisi per categoria.
Nel caso in cui tu abbia dati mescolati i quali vanno messi ognuno nel proprio nodo di appartenenza, ti basterebbe usare il nome delle categoria acquisito per individuare il relativo nodo e, una volta reperito il riferimento a tale nodo, utilizzare la proprietà Nodes per aggiungere i nodi figli. Esemplifico:
codice:
' Blocca l'aggiornamento visuale del controllo
demoTreeView.BeginUpdate()
Try
' Elimina tutti i nodi presenti nella struttura
demoTreeView.Nodes.Clear()
' Esegue un ciclo per creare i nodi "genitori"
Dim i As Integer
Dim j As Integer
For i = 1 To 100
demoTreeView.Nodes.Add(New TreeNode("Nodo " + i.ToString()))
Next
' Esegue un ciclo per creare i nodi "figli"
For i = 1 To 100
Dim parentName As String
Dim parentNode As TreeNode
' Cerca il nodo "padre"
' (meglio usare un Enumerator)
parentName = "Nodo " + i.ToString()
parentNode = Nothing
For j = 0 To demoTreeView.Nodes.Count - 1
If demoTreeView.Nodes(j).Text = parentName Then
parentNode = demoTreeView.Nodes(j)
End If
Next
' Genera i nodi "figli"
If Not(parentNode Is Nothing) Then
For j = 1 To 10
parentNode.Nodes.Add("Figlio " + j.ToString())
Next
End If
Next
Finally
' Sblocca l'aggiornamento visuale del controllo
demoTreeView.EndUpdate()
End Try
Non è il massimo delle performance, ma funziona.
Concludendo, credo che la soluzione migliore sia quella di reperire i dati in forma già ordinata per categoria di appartenenza, in modo da poter aggiungere il nodo padre e, tenendo memorizzato un riferimento ad esso, aggiungere tutti i nodi figli per passare poi alla categoria e al rispettivo nodo padre successivi.
Ciao!