Webform token for select field value (not key)
It turns out the issue was with the form alter hook. I had updated the #options which made the form work just fine, however I needed to update the webform component with a line delimited list of key|value pairs.

function MODULE_form_alter(&amp;$form, &amp;$form_state, $form_id) {
  if ($form_id == 'FORM_ID') {

    // get all tours
    $query = db_select('node', 'n');
    $query-&gt;fields('n', array('nid', 'title'));
    $query-&gt;condition('n.type', 'tour');
    $query-&gt;join('field_data_field_tour_type', 't', 't.entity_id = n.nid');
    $query-&gt;fields('t', array('field_tour_type_value'));
    $result = $query-&gt;execute();

    // group by tour type
    $options = array();
    $flat_options = array();
    while ($row = $result-&gt;fetchObject()) {

      // tour type 1
      if ($row-&gt;field_tour_type_value == 1) {
        $options['Type 1'][$row-&gt;nid] = date('d-M-y', strtotime($row-&gt;field_event_date_value)) . ': ' . $row-&gt;title;
        $flat_options .= $row-&gt;nid . '|' . date('d-M-y', strtotime($row-&gt;field_event_date_value)) . ': ' . $row-&gt;title . "\n";
      }

      // tour type 2
      else if ($row-&gt;field_tour_type_value == 2) {
        $options['Type 2'][$row-&gt;nid] = date('d-M-y', strtotime($row-&gt;field_event_date_value)) . ': ' . $row-&gt;title;
        $flat_options .= $row-&gt;nid . '|' . date('d-M-y', strtotime($row-&gt;field_event_date_value)) . ': ' . $row-&gt;title . "\n";
      }
    }

    ksort($options);

    // set the tour options correctly
    $form['submitted']['tour']['#options'] = $options;
    $form['#node']-&gt;webform['components'][7]['extra']['items'] = $flat_options;
  }
}


I've added the $flat_options variables to handle this and assigned it to the proper field in my form array. Keep in mind referencing the component by number [7] is not the cleanest and most maintainable way to do this but it works in a pinch.