Also ich versuche mal zu raten warum das so ist.
Das unterste Free (von TObject) ruft Destroy auf.
Da Free eigentlich eine procedure ist und kein destructor funktioniert das ganze auch, denn ein destructor gibt am Ende das eigentliche Objekt frei.
Da er nun free als destructor deklariert hat, welches wiederum Destruktor Nr.2 namens "destroy" aufruft, wird 2x versucht das eigentliche Objekt per Compilermagic freizugeben.
Richtig?
Wer später bremst ist eher tot.