...das Problem ist, dass Du in Form2.FormClose mit Action := caFree; den Speicher frei gibst, aber in Form1 noch auf das Form2 zeigt das nicht mehr vorhanden ist. Wenn Du das weglässt kannst Du doch jederzeit in Form1 mit FreeAndNil (Form2) das Form aus dem Speicher löschen und hast Form2 auf Nil gesetzt und kannst es anschließend wieder neu erzeugen.
Ja genau das war ja das Problem, wenn Form2 durch den "X"-Button geschlossen wird und nur durch den kann Form2 in diesem Fall geschlossen werden, dann zeigt in unit1 die Variable Form1 natürlich noch auf den Speicherbereich und assigned(Form2) ist dann true!