I noticed that when I use MultiTargetPath to solve a path from A to B, and then immediately solve a path from B to B, the returned path from B to B is the same as the solved path from A to B.
I believe the problem is in MultiTargetPath.Initialize(). If FoundTarget() is called before NodeRun startRNode has been set up, it will use data from the previous run. I moved the loop over targetNodes to just above startNode.Open(), and things seem to work properly now.