Creo que no tenes muy claro cual es la secuencia para cerrar un form.
El evento OnCloseQuery se dispara, y si al terminar la Variable CanClose vale true, se procede a "cerrar" el formulario. Cerrar, significa intentar hacer invisible el formulario (lo cual no es posible con MDIChild), pero no liberará ninguna memoria. Al momento de cerrar el formulario, se dispara el Evento OnClose.
Si el parámetro Action es cambiado a caFree, entonces
si se destruye el formulario al momento de cerrarlo, lo que conlleva la liberación de memoria ocupada por el formulario y todos los demás objetos para los que éste sea el propietario.
Hasta luego.