Хм, может я чего не понимаю, конечно, но
$this->_relatedObjects[$alias]= array_merge($this->_relatedObjects[$alias], $collection);
в $collection и в $this->_relatedObjects[$alias] и так будут разные интансы объектов с одинаковым id, разве нет? И в результате операции
array_merge($this->_relatedObjects[$alias], $collection);
в $this->_relatedObjects[$alias] будут так же новые инстансы, пришедшие из $collection. Только array_merge затрёт ключи. А при сложении массивов (порядок элементов только другой) ключи не затрутся. Разве не это было нужно?