How does data propagate from the formElement of a Widget to the properties of a FieldItem?
submitForm() of the content entity form calls via several other methods (which you find in the call stack) this method of the field widget, which then sets the values of the field items.

WidgetBase::extractFormValues():

  public function extractFormValues(FieldItemListInterface $items, array $form, FormStateInterface $form_state) {
    $field_name = $this-&gt;fieldDefinition-&gt;getName();

    // Extract the values from $form_state-&gt;getValues().
    $path = array_merge($form['#parents'], [$field_name]);
    $key_exists = NULL;
    $values = NestedArray::getValue($form_state-&gt;getValues(), $path, $key_exists);

    if ($key_exists) {
      // Account for drag-and-drop reordering if needed.
      if (!$this-&gt;handlesMultipleValues()) {
        // Remove the 'value' of the 'add more' button.
        unset($values['add_more']);

        // The original delta, before drag-and-drop reordering, is needed to
        // route errors to the correct form element.
        foreach ($values as $delta =&gt; &amp;$value) {
          $value['_original_delta'] = $delta;
        }

        usort($values, function ($a, $b) {
          return SortArray::sortByKeyInt($a, $b, '_weight');
        });
      }

      // Let the widget massage the submitted values.
      $values = $this-&gt;massageFormValues($values, $form, $form_state);

      // Assign the values and remove the empty ones.
      $items-&gt;setValue($values);
      $items-&gt;filterEmptyItems();

      // Put delta mapping in $form_state, so that flagErrors() can use it.
      $field_state = static::getWidgetState($form['#parents'], $field_name, $form_state);
      foreach ($items as $delta =&gt; $item) {
        $field_state['original_deltas'][$delta] = isset($item-&gt;_original_delta) ? $item-&gt;_original_delta : $delta;
        unset($item-&gt;_original_delta, $item-&gt;_weight);
      }
      static::setWidgetState($form['#parents'], $field_name, $form_state, $field_state);
    }
  }