Nur so eine Idee und ungetestet:
Delphi-Quellcode:
const
PM_DESTROYMESSAGE = WM_USER + 42;
type
TYourForm = class(TForm)
...
private
procedure PMDestroyMessage(var Msg: TMessage); message PM_DESTROYMESSAGE;
...
end;
In PMDestroyMessage erledigst Du dann das Freigeben und den Neuaufbau. Die Panels machen das dann nicht mehr direkt, sondern schicken einfach per PostMessage PM_DESTROYMESSAGE an das Formular. Du kannst ja mal Bescheid geben, ob das so funktioniert.