Custom field not saving updates
The problem is with volunteers_field_widget_form and volunteers_field_widget_form_alter. volunteers_field_widget_form_alter was preventing updates. If I set the default_value of the relevant elements appropriately in volunteers_field_widget_form, Drupal both allows updates and displays correctly.

$element['position_title'] = array(
  '#type' =&gt; 'textfield',
  '#length' =&gt; 255,
  '#title' =&gt; $t('Position name'),
  '#default_value' =&gt; isset($items[$delta]['position_title']) ? $items[$delta]['position_title'] : null,
  '#weight' =&gt; 0,
  '#delta' =&gt; $delta,
  '#size' =&gt; 'big'
);