diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
index 946645d..97ab5e9 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
@@ -156,6 +156,15 @@ public function setValue($values, $notify = TRUE) {
       parent::setValue($values, FALSE);
       // Support setting the field item with only one property, but make sure
       // values stay in sync if only property is passed.
+      if (isset($values['target_id']) && isset($values['entity']) && $values['target_id'] == static::$NEW_ENTITY_MARKER &&
+      !$values['entity']->isNew()) {
+        // Handle when the entity was saved but the property here was not
+        // updated - this happens when properties are cloned before
+        // EntityReferenceItem::preSave() has run.
+        // @see \Drupal\Core\TypedData\TypedDataManager::getPropertyInstance()
+        $values['target_id'] = $values['entity']->id();
+
+      }
       if (isset($values['target_id']) && !isset($values['entity'])) {
         $this->onChange('target_id', FALSE);
       }
diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceItemTest.php b/core/modules/entity_reference/src/Tests/EntityReferenceItemTest.php
index 0898f48..c8911f0 100644
--- a/core/modules/entity_reference/src/Tests/EntityReferenceItemTest.php
+++ b/core/modules/entity_reference/src/Tests/EntityReferenceItemTest.php
@@ -208,6 +208,8 @@ public function testEntitySaveOrder() {
     $entity->name->value = $this->randomMachineName();
     // Now save the term.
     $term->save();
+    // Now attempt to get the entity value.
+    $entity->get('field_text_taxonomy_term');
     // And then the entity.
     $entity->save();
     $this->assertEqual($entity->field_test_taxonomy_term->entity->id(), $term->id());
