Values don't get saved to the database when fields are wrapped in a container
It seems Drupal adds a #tree = true property to the field parent so you need to process the data output by the form youserlf or the form nested elements will be ignored. As @IvanJaros poited out, WidgetBase::massageFormValues let's you alter the data.

public function massageFormValues(array $values, array $form, FormStateInterface $form_state)
{
  for ($i=0; $i &lt; count($values); ++$i) {
    if (isset($values[$i]['concelhocontainer']['concelho'])) {
      $values[$i]['concelho'] = $values[$i]['concelhocontainer']['concelho'];
    }
  }
  return $values;
}