Al parecer usan variables globales para crear los forms. Eso siempre da problemas
El bloque de código idiomático para crear y mostrar un form es:
Código Delphi
[-]
procedure Foo;
var
UnForm: TUnForm;
begin
UnForm := TUnForm.Create(OwnerDelForm/nil);
UnForm.Show/ShowModal;
end;
Si pasamos un owner que se encarga de liberar la memoria no hace falta más nada. Si pasamos nil y se invoca a ShowModal se debe usar un bloque try-finally para liberar el form; sino si se invoca a Show se debe interceptar el evento OnClose y asignar al parámetro Action el valor caFree
Más específicamente, yo suelo usar un ancestro que no es TForm en donde asigno caFree en el OnClose y siempre heredo de este form. De esta manera funciona bien siempre, incluso si implementa una interface. Recordando que TForm es heredero de TComponent por lo que el mecanismo de reference counting esta deshabilitado y se debe manejar la memoria manualmente