diff --git a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php
index 40c7370..67e752b 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php
@@ -117,6 +117,20 @@ public function validate($value, Constraint $constraint) {
       }
     }
 
+    // Don't try to validate pre-existing items.
+    if ($target_ids) {
+      if ($value->getParent() && ($entity = $value->getEntity()) && !$entity->isNew()) {
+        $existing_entity = $this->entityTypeManager->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id());
+        $referenced_entities = $existing_entity->{$value->getFieldDefinition()->getName()}->referencedEntities();
+
+        foreach ($referenced_entities as $referenced_entity) {
+          if (($key = array_search($referenced_entity->id(), $target_ids)) !== FALSE) {
+            unset($target_ids[$key]);
+          }
+        }
+      }
+    }
+
     // Add violations on deltas with a target_id that is not valid.
     if ($target_ids) {
       $valid_target_ids = $handler->validateReferenceableEntities($target_ids);
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php b/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php
index a365ea5..286d46c 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php
@@ -3,6 +3,12 @@
 namespace Drupal\KernelTests\Core\Entity;
 
 use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
+use Drupal\node\Entity\Node;
+use Drupal\user\Entity\Role;
+use Drupal\user\Entity\User;
 
 /**
  * Tests validation constraints for ValidReferenceConstraintValidator.
@@ -11,6 +17,8 @@
  */
 class ValidReferenceConstraintValidatorTest extends EntityKernelTestBase {
 
+  use EntityReferenceTestTrait;
+
   /**
    * The typed data manager to use.
    *
@@ -21,7 +29,7 @@ class ValidReferenceConstraintValidatorTest extends EntityKernelTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['field', 'user'];
+  public static $modules = ['field', 'node', 'user'];
 
   /**
    * {@inheritdoc}
@@ -66,4 +74,86 @@ public function testValidation() {
     $this->assertEqual($violation->getRoot(), $typed_data, 'Violation root is correct.');
   }
 
+  /**
+   * Tests the validation of pre-existing items in an entity reference field.
+   */
+  public function testPreExistingItemsValidation() {
+    // Create two types of users, with and without access to bypass content
+    // access.
+    /** @var \Drupal\user\RoleInterface $role_with_access */
+    $role_with_access = Role::create(['id' => 'role_with_access']);
+    $role_with_access->grantPermission('bypass node access');
+    $role_with_access->save();
+
+    /** @var \Drupal\user\RoleInterface $role_without_access */
+    $role_without_access = Role::create(['id' => 'role_without_access']);
+    $role_without_access->save();
+
+    $user_with_access = User::create(['roles' => ['role_with_access']]);
+    $user_without_access = User::create(['roles' => ['role_without_access']]);
+
+    // Add an entity reference field.
+    $this->createEntityReferenceField('entity_test', 'entity_test', 'field_test', 'Field test', 'node', 'default', [], FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
+
+    // Create an unpublished node and reference it from a test entity.
+    $node = Node::create([
+      'title' => 'Test node',
+      'type' => 'node',
+    ]);
+    $node->setUnpublished();
+    $node->save();
+
+    $referencing_entity = EntityTest::create([
+      'field_test' => [
+        'entity' => $node,
+      ]
+    ]);
+
+    // Check that users with access are able pass the validation for fields
+    // without pre-existing content.
+    $this->container->get('account_switcher')->switchTo($user_with_access);
+
+    $violations = $referencing_entity->field_test->validate();
+    $this->assertCount(0, $violations);
+
+    // Check that users without access are not able pass the validation for
+    // fields without pre-existing content.
+    $this->container->get('account_switcher')->switchTo($user_without_access);
+
+    $violations = $referencing_entity->field_test->validate();
+    $this->assertCount(1, $violations);
+    $violation = $violations[0];
+    $this->assertEquals(t('This entity (%type: %id) cannot be referenced.', [
+      '%type' => 'node',
+      '%id' => $node->id(),
+    ]), $violation->getMessage());
+
+    // Now save the referencing entity which will create a pre-existing state
+    // for it and repeat the checks. This time, the user without access should
+    // be able to pass the validation as well because it's not changing the
+    // pre-existing state.
+    $referencing_entity->save();
+
+    $this->container->get('account_switcher')->switchTo($user_with_access);
+
+    $violations = $referencing_entity->field_test->validate();
+    $this->assertCount(0, $violations);
+
+    // Check that users without access are not able pass the validation for
+    // fields without pre-existing content.
+    $this->container->get('account_switcher')->switchTo($user_without_access);
+
+    $violations = $referencing_entity->field_test->validate();
+    $this->assertCount(0, $violations);
+
+    // Re-save the referencing entity and check that the referenced entity is
+    // not affected.
+    $referencing_entity->name->value = $this->randomString();
+    $referencing_entity->save();
+    $this->assertEquals($node->id(), $referencing_entity->field_test->target_id);
+
+    $violations = $referencing_entity->field_test->validate();
+    $this->assertCount(0, $violations);
+  }
+
 }
