Erstens: Man ruft nicht Destroy auf, sondern Free. Und bei Forms besser Release.
Release ist dazu gedacht, um aus einem Event des Formulars aufgerufen zu werden, so dass es erst freigegeben wird, wenn der Event beendet wurde. In allen anderen Situationen sollte man Free aufrufen.
Wie viel wollen wir wetten, dass du irgendwo ein Application.ProcessMessages, Application.HandleMessage, ShowMessage oder Dergleichen aufrufst, welches Messages mitten der Behandlung ausführt, anstatt erst anschließend?
Vermutlich korrekt.