Not sure if this a bug or intentional but I have been refactoring some of our code to use the IsFloating property, and the changes you made to remember state of floating windows.
https://www.actiprosoftware.com/community/thread/23598/detecting-when-a-floating-window-is-docked#112822
When you dock a ToolWindow (A) within another ToolWindow (B) and then close and open ToolWindow (B) its state is not remembered and ToolWindow (B) is now floating rather than being docked in ToolWindow as again (A). [Docked maybe the wrong terminology, stacked is probably more apropriate]
This can be reproduced in your MVVM ToolWindows example using Snoop. I can dock Tool 2 into Tool 1. So now they are stacked and a TabControl is visible. I can modify the IsOpen property in the ViewModel from true to false for Tool 2 using Snoop. When I change the IsOpen property back to true it is now floating.