Handling circular entity references with Migrate
The main problem has to do with how stubs are handled in Migrate, and is related to a known issue.

In short, when the destination can be one of several content types, the migration doesn't know what content type to create the stub as in a generic way.

My current workaround for this is to prevent stubs from being created:

abstract class MyNodeMigration extends DrupalNode6Migration {
  ... 

  protected function createStub(Migration $migration, array $source_id) {
    return FALSE;
  }
}


When the migration runs, stubs don't get created, but the entity reference fields in my destinations also don't get populated.

I then manually reset the highwater mark

db_update('migrate_status')
  -&gt;fields(array('highwater' =&gt; 0))
  -&gt;condition(...)
  -&gt;execute();


and then rerun the migrations.  Since the destination nodes exists, the entity reference fields can be populated properly.