El problema está en el uso de los arreglos dinámicos. Estos arreglos, a diferencia de uno normal, no son copiados enteros cuando uno usa ":=". Solamente se copia el puntero hacia el arreglo. Por eso, cuando hacés esas asignaciones PadreDominante termina *apuntando* al arreglo Instnacias[P1]. No es una copia, es el mismo arreglo.
Para copiar arreglos dinámicos podés usar la función copy:
Código Delphi
[-]
PadreDominante:= copy(Instancias[P1], 0, Length(Instancias[P1]));
Saludongos.