Nach dem FormDestroy ist das Formular und seine Komponenten schon weg. Daher die Prüfung mit Assigned(Button1), ob der Button überhaupt noch valide da ist.
Wenn das Form und seine Komponenten
schon weg sind (ich vermute, das heißt
freigegeben), dann kann
Assigned(Button1) immer noch
True liefern, obwohl der Zugriff darauf dann auf undefiniertem Speicher erfolgt. Das kann dann gut gehen - muss aber nicht.