diff --git a/core/modules/rest/src/Plugin/rest/resource/EntityResource.php b/core/modules/rest/src/Plugin/rest/resource/EntityResource.php
index 9b1d15f005..e7da2938e7 100644
--- a/core/modules/rest/src/Plugin/rest/resource/EntityResource.php
+++ b/core/modules/rest/src/Plugin/rest/resource/EntityResource.php
@@ -297,6 +297,7 @@ public function patch(EntityInterface $original_entity, EntityInterface $entity
     }
 
     // Validate the received data before saving.
+    $changed_fields = array_keys($entity->_restSubmittedFields);
     $this->validate($original_entity);
     try {
       $original_entity->save();
diff --git a/core/modules/rest/src/Plugin/rest/resource/EntityResourceValidationTrait.php b/core/modules/rest/src/Plugin/rest/resource/EntityResourceValidationTrait.php
index 09b4b64bae..7b0864c450 100644
--- a/core/modules/rest/src/Plugin/rest/resource/EntityResourceValidationTrait.php
+++ b/core/modules/rest/src/Plugin/rest/resource/EntityResourceValidationTrait.php
@@ -19,10 +19,14 @@
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity to validate.
    *
+   * @param string[] $changed_fields
+   *   An array of changed fields. If specified filter out the non applying
+   *   violations.
+   *
    * @throws \Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException
    *   If validation errors are found.
    */
-  protected function validate(EntityInterface $entity) {
+  protected function validate(EntityInterface $entity, array $changed_fields = []) {
     // @todo Remove when https://www.drupal.org/node/2164373 is committed.
     if (!$entity instanceof FieldableEntityInterface) {
       return;
@@ -33,6 +37,13 @@ protected function validate(EntityInterface $entity) {
     // changes.
     $violations->filterByFieldAccess();
 
+    // Filter out violations on fields which weren't touched.
+    if ($changed_fields) {
+      $entity_level_violations = $violations->getEntityViolations();
+      $entity_level_violations->addAll($violations->filterByFields($changed_fields));
+      $violations = $entity_level_violations;
+    }
+
     if ($violations->count() > 0) {
       $message = "Unprocessable Entity: validation failed.\n";
       foreach ($violations as $violation) {
