Te estás complicando más de la cuenta. Si te fijas, tu método TMDIForm.Close, no está sino copiando el método base de TCustomForm. Ese método base llama a DoClose. Es éste el que tienes que redefinir:
Código Delphi
[-]
protected
procedure DoClose(var Action: TCloseAction); override;
Código Delphi
[-]
procedure TForm2.DoClose(var Action: TCloseAction);
begin
inherited;
Action := caFree;
end;
// Saludos