Mapping split taxonomy terms to new vocabs in nodes in migrate_d2d
As a possibility I mentioned above, I did some wrangling in the prepare() method to move the terms from field_people_organizations to field_journalists and field_non_journalists.

  function prepare($entity, stdClass $row) {
    // Turn off pathauto generation for the node so we end
    // up with only one alias record.
    $entity-&gt;path['pathauto'] = 0;

    // Need to manually move any items that should be in the Journalists and Non-Journalists
    // vocabularies there from People and Organizations, since migration mapping doesn't
    // seem to be working.

    // First, see if the nb_migrate_users array is already cached.
    $nb_migrate_journalists = &amp; drupal_static(__FUNCTION__);
    if (!isset($nb_migrate_journalists)) {
      if ($cache = cache_get('nb_migrate_journalists')) {
        $nb_migrate_journalists = $cache-&gt;data;
      }
      // Not cached, so we need to generate it this time through.
      else {
        //Get new tids for terms mapped in migrate_map_jounralists.
        $query = db_select('nb_migrate_journalists', 'nmj');
        $query-&gt;fields('nmj', array('journalists', 'non_journalists'));
        $query-&gt;innerJoin('migrate_map_peopleorganizations', 'mmp', 'nmj.tid = mmp.sourceid1');
        $query-&gt;addField('mmp', 'destid1');
        $result = $query-&gt;execute();

        foreach ($result as $record) {
          // Use the target vid for the vocab; 5 = Journalists, 7 = Non-Journalists.
          if ($record-&gt;journalists == 'x') {
            $nb_migrate_journalists[$record-&gt;destid1] = 5;
          }
          elseif ($record-&gt;non_journalists == 'x') {
            $nb_migrate_journalists[$record-&gt;destid1] = 7;
          }
        }
        // Cache the array.
        cache_set('nb_migrate_journalists', $nb_migrate_journalists, 'cache');
      }
    }
    // Move terms in array based on values in field_people_organizations and $nb_migrate_journalists.
    if (isset($entity-&gt;field_people_organizations[LANGUAGE_NONE][0])) {
      foreach ($entity-&gt;field_people_organizations[LANGUAGE_NONE] as $key =&gt; $term) {
        if (in_array((int)$term['tid'], array_keys($nb_migrate_journalists))) {
          if ($nb_migrate_journalists[$term['tid']] == 5) {
            $entity-&gt;field_journalists[LANGUAGE_NONE][] = array('tid' =&gt; $term['tid']);
          }
          elseif ($nb_migrate_journalists[$term['tid']] == 7) {
            $entity-&gt;field_non_journalists[LANGUAGE_NONE][] = array('tid' =&gt; $term['tid']);
          }
          // Remove term from field_people_organizations.
          unset($entity-&gt;field_people_organizations[LANGUAGE_NONE][$key]);
        }
      }
    }
  }


I still think there is probably a better way to do this within the class constructor, so if at some point in the future you read this and know that answer, please add it here.

Thanks.