User sabbath69 pointed out that with my Shell Tree Control, when the control is on a secondary form and that form unloads, the UserControl_Terminate event does not fire; it doesn't until the whole program is exiting. This is not the case with any of the other UCs I checked (besides my other UC, ucShellBrowse, which has the same issue). It seems like something that would happen because something needs to be freed; but cleanup can't occur if the terminate event isn't even fired.
Any thoughts?