diff --git a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/EntityChangedConstraintValidator.php b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/EntityChangedConstraintValidator.php
index 28d81ba6e4..0fb686ce3b 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/EntityChangedConstraintValidator.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/EntityChangedConstraintValidator.php
@@ -15,27 +15,47 @@ class EntityChangedConstraintValidator extends ConstraintValidator {
    */
   public function validate($entity, Constraint $constraint) {
     if (isset($entity)) {
-      /** @var \Drupal\Core\Entity\EntityInterface $entity */
+      /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
       if (!$entity->isNew()) {
-        $saved_entity = \Drupal::entityManager()->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id());
+        $saved_newer_entity = FALSE;
         // Ensure that all the entity translations are the same as or newer
         // than their current version in the storage in order to avoid
         // reverting other changes. In fact the entity object that is being
         // saved might contain an older entity translation when different
         // translations are being concurrently edited.
-        if ($saved_entity) {
-          $common_translation_languages = array_intersect_key($entity->getTranslationLanguages(), $saved_entity->getTranslationLanguages());
-          foreach (array_keys($common_translation_languages) as $langcode) {
-            // Merely comparing the latest changed timestamps across all
-            // translations is not sufficient since other translations may have
-            // been edited and saved in the meanwhile. Therefore, compare the
-            // changed timestamps of each entity translation individually.
-            if ($saved_entity->getTranslation($langcode)->getChangedTime() > $entity->getTranslation($langcode)->getChangedTime()) {
-              $this->context->addViolation($constraint->message);
-              break;
+        if ($entity->hasField('changed')) {
+          $query = \Drupal::entityTypeManager()
+            ->getStorage($entity->getEntityTypeId())
+            ->getQuery('OR');
+          // Merely comparing the latest changed timestamps across all
+          // translations is not sufficient since other translations may have
+          // been edited and saved in the meanwhile. Therefore, compare the
+          // changed timestamps of each entity translation individually.
+          foreach (array_keys($entity->getTranslationLanguages()) as $langcode) {
+            $translation_changed_time = $entity->getTranslation($langcode)->getChangedTime();
+            $query->condition('changed', $translation_changed_time, '>', $langcode);
+          }
+          $saved_newer_entity = $query->execute();
+        }
+        else {
+          $saved_entity = \Drupal::entityTypeManager()->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id());
+          if ($saved_entity) {
+            $common_translation_languages = array_intersect_key($entity->getTranslationLanguages(), $saved_entity->getTranslationLanguages());
+            foreach (array_keys($common_translation_languages) as $langcode) {
+              // Merely comparing the latest changed timestamps across all
+              // translations is not sufficient since other translations may have
+              // been edited and saved in the meanwhile. Therefore, compare the
+              // changed timestamps of each entity translation individually.
+              if ($saved_entity->getTranslation($langcode)->getChangedTime() > $entity->getTranslation($langcode)->getChangedTime()) {
+                $saved_newer_entity = TRUE;
+                break;
+              }
             }
           }
         }
+        if ($saved_newer_entity) {
+          $this->context->addViolation($constraint->message);
+        }
       }
     }
   }
