1) I thought that, in most cases, if you remove an item during a For Each, you got all sorts of strange results generally? I've had a number of programs crash when doing this kind of thing

2) A quick work around is to do this, but it doesn't really answer you question:
Code:
For Each Childnode As TreeNode In TreeView1.Nodes
  Do While Childnode.Nodes.Count = 0
    Childnode = Childnode.NextNode
    Childnode.PrevNode.Remove()
  Loop
Next