Steve,
I've just tested a piece of code for the issue. And it seems to work here.
One thing that I can suppose is that you're forcing to rebind nodes
every postback, thus even the same nodes (having equal
values,text,position etc.) have different ID values.
FlyTreeNode.ID is a GUID value that is set when the node is created
and persisted as any other properties within control viewstate.
So the question is in the way you're adding nodes to treeview. Do you
add nodes every postback?