Recuerda que el DFM no se compila, por eso no da un error a la hora de compilar el proyecto si lo daría si tuvieramos esa referencia por código (Para mi este es uno de los pocos puntos en contra de Delphi). Por otro lado, si bien en el DFM las referencias se guardan por nombre, bien sabemos que Delphi referencia a los objetos por los punteros de los mismos.
Por una ojeada no en profundidad, me parece que la respuesta esta en la función Classes.GlobalFixupReferences, cuando lee el DFM del form y no encuentra fácilmente la referencia a un control (TReader.DoFixupReferences), la agrega a la lista GlobalFixupList (GlobalFixupList.Add(FFixups[i])
, al terminar del leer el DFM, ejecuta esta función busca al DataModule con FindGlobalComponent y busca el componente dentro con FindNestedComponent....
Obviamente como FindGlobalComponent utiliza la lista de los objetos globales registrados, va a tomar el primero de la lista, es decir, el primero que se registró.
Saludos!