I have some applications that use Divelements sanddock. For a while I fussed with getting the close event on my dock controls to fire when the hosting application window was closed. After some tweaking, I have come up with some code that is acceptable.
In the main form I have this code in the close event.
foreach (DockControl control in dockManager.GetDockControls())
control.Close();
After putting that code in the main form, the close events on your dock controls as well as tabbed documents will fire as they should. Sometimes things are so simple, developers over think the solution.