I figured it out and will have the fix in svn later tonight. The issue only happens when you create 2 pages at the same level with the same name (which is a weird thing to do anyway for a real site).
When we find the selected node to expand we use a thing called valuePath which is a delimited list of TreeNode.Value leading down the tree to the page.
According to this page on msdn, if the treeNode.Value is null it will use the .Text property for the Value. So I thinking this case it is using the text and they are the same and at the same level and hence they have the same valuePath so it was just expanding the first node with a matching valuepath.
As this page mentions that each page at the same level must have a unique .Value so not having a uniquw value was the root cause of the bug.
I think since we were just doing simple DataBinding the .Value was not set so it was using the .Text as .Value as default behavior. So the Solution was to explicitly set the value in the DataBound event like this:
e.Node.Value = mapNode.Url;
giving it a more unique value for the .Value property so it can find the correct node to expand.