diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
index 289d2a9934..f1ec4ac938 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
@@ -1295,6 +1295,11 @@ protected function saveToDedicatedTables(ContentEntityInterface $entity, $update
 
     $original = !empty($entity->original) ? $entity->original : NULL;
 
+    // Use the loaded revision instead of default one to check for data change.
+    if ($original && !$entity->isNewRevision() && !$entity->isDefaultRevision()) {
+      $original = $this->loadRevision($entity->getLoadedRevisionId());
+    }
+
     // Determine which fields should be actually stored.
     $definitions = $this->entityFieldManager->getFieldDefinitions($entity_type, $bundle);
     if ($names) {
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
index 7c701f1b26..7fb73d56ee 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldTest.php
@@ -21,6 +21,7 @@
 use Drupal\Core\TypedData\TypedDataInterface;
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\entity_test\Entity\EntityTestComputedField;
+use Drupal\entity_test\Entity\EntityTestRev;
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
 
@@ -95,6 +96,38 @@ protected function createTestEntity($entity_type) {
     return $entity;
   }
 
+  /**
+   * Test setting field values on revisionable entities.
+   */
+  public function testFieldEntityRevisionWrite() {
+    $storage = \Drupal::entityTypeManager()->getStorage('entity_test_rev');
+
+    // Create a new entity, with a field value 'foo'.
+    $entity = EntityTestRev::create();
+    $entity->field_test_text->value = 'foo';
+    $entity->save();
+
+    // Create a new non-default revision and set the field value to 'bar'.
+    $entity->setNewRevision(TRUE);
+    $entity->isDefaultRevision(FALSE);
+    $entity->field_test_text->value = 'bar';
+    $entity->save();
+
+    $forward_revision_id = $entity->getRevisionId();
+
+    // Load the forward revision and set the field value to equal the value of
+    // the default revision.
+    $forward_revision = $storage->loadRevision($forward_revision_id);
+    $forward_revision->field_test_text->value = 'foo';
+    $forward_revision->save();
+
+    $storage->resetCache();
+
+    // The updated field value should have correctly saved as 'foo'.
+    $forward_revision = $storage->loadRevision($forward_revision_id);
+    $this->assertEquals('foo', $forward_revision->field_test_text->value);
+  }
+
   /**
    * Tests reading and writing properties and field items.
    */
