diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index 4f11f1e..8886862 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -1173,10 +1173,27 @@ public function hasTranslationChanges() {
     // possible or be meaningless.
     /** @var \Drupal\Core\Entity\ContentEntityBase $translation */
     $translation = $original->getTranslation($this->activeLangcode);
+
+    // Define the fields, which should not be checked for changes. We only want
+    // to skip these fields, if we are comparing different revisions, otherwise
+    // we check them for changes as well. This applies as well if the revision
+    // id has been purged in order to enforce the creation of a new revision,
+    // in this case we assume that we are comparing different revisions.
+    $skip_compare = [];
+    if ($this->getRevisionId() != $original->getRevisionId()) {
+      $skip_compare = [
+        'revision_uid' => TRUE,
+        'revision_timestamp' => TRUE,
+        'revision_log' => TRUE,
+        'revision_translation_affected' => TRUE,
+        $this->getEntityType()->getKey('revision') ?: 'revision_id' => TRUE
+      ];
+    }
+
     foreach ($this->getFieldDefinitions() as $field_name => $definition) {
       // @todo Avoid special-casing the following fields. See
       //    https://www.drupal.org/node/2329253.
-      if ($field_name == 'revision_translation_affected' || $field_name == 'revision_id') {
+      if (isset($skip_compare[$field_name])) {
         continue;
       }
       if (!$definition->isComputed() && (!$translated || $definition->isTranslatable())) {
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityHasChangesTest.php b/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityHasChangesTest.php
new file mode 100644
index 0000000..52fd194
--- /dev/null
+++ b/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityHasChangesTest.php
@@ -0,0 +1,146 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\KernelTests\Core\Entity\ContentEntityHasChangesTest.
+ */
+
+namespace Drupal\KernelTests\Core\Entity;
+
+use Drupal\node\Entity\Node;
+use Drupal\node\Entity\NodeType;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\user\Entity\User;
+
+/**
+ * Tests the hasTransationChanges function of content entities.
+ *
+ * @group Entity
+ */
+class ContentEntityHasChangesTest extends KernelTestBase {
+
+  /**
+   * Bundle of 'node' entity.
+   *
+   * @var string
+   */
+  protected $bundle = 'test';
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['system', 'user', 'node'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema('user');
+    $this->installEntitySchema('node');
+    $this->installSchema('node', 'node_access');
+    $this->installSchema('system', 'sequences');
+
+    // Create a new node-type.
+    NodeType::create([
+      'type' => $this->bundle,
+      'name' => $this->randomString(),
+    ])->save();
+  }
+
+  /**
+   * Tests the correct functionality of the hasTranslationChanges function.
+   */
+  public function testHasTranslationChanges() {
+    $user1 = User::create([
+      'name' => 'username1',
+      'status' => 1,
+    ]);
+    $user1->save();
+
+    $user2 = User::create([
+      'name' => 'username2',
+      'status' => 1,
+    ]);
+    $user2->save();
+
+    $node = Node::create([
+      'type' => $this->bundle,
+      'title' => $this->randomString(),
+    ]);
+    $node->setRevisionAuthorId($user1->id());
+    $node->save();
+
+    $this->assertFalse($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found no changes after the entity has been saved.');
+
+    // Update the revision metadata fields (revision_timestamp, revision_uid,
+    // revision_log, vid) which should be skipped from checking for changes in
+    // ContentEntityBase::hasTranslationChanges.
+    $node_previous_rev_id = $node->getRevisionId();
+    // Revision metadata field revision_timestamp.
+    $node->setRevisionCreationTime(time());
+    // Revision metadata field revision_uid.
+    $node->setRevisionAuthorId($user2->id());
+    // Revision metadata field revision_log.
+    $node->revision_log = 'test';
+    // Revision metadata field revision_translation_affected.
+    $node->setRevisionTranslationAffected(TRUE);
+    $node->setNewRevision(TRUE);
+    $node->save();
+
+    /** @var \Drupal\Core\Entity\EntityStorageInterface $storage */
+    $storage = $this->container->get('entity_type.manager')
+      ->getStorage('node');
+    /** @var \Drupal\node\NodeInterface $node */
+    $node = $storage->loadRevision($node_previous_rev_id);
+
+    // Check that the metadata fields have been skipped when comparing
+    // different revisions.
+    $this->assertFalse($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found no changes when comparing different revisions.');
+
+    // Check that the metadata fields are not been skipped when comparing same
+    // revisions.
+    // Revision metadata field revision_timestamp.
+    $node = $storage->loadUnchanged($node->id());
+    $node->setRevisionCreationTime(time() + 1);
+    $this->assertTrue($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found changes when comparing same revisions.');
+    // Revision metadata field revision_uid.
+    $node = $storage->loadUnchanged($node->id());
+    $node->setRevisionAuthorId($user1->id());
+    $this->assertTrue($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found changes when comparing same revisions.');
+    // Revision metadata field revision_log.
+    $node = $storage->loadUnchanged($node->id());
+    $node->revision_log = $this->randomString(8);
+    $this->assertTrue($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found changes when comparing same revisions.');
+    // Revision metadata field revision_translation_affected.
+    $node = $storage->loadUnchanged($node->id());
+    $node->setRevisionTranslationAffected(TRUE);
+    $this->assertTrue($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found changes when comparing same revisions.');
+
+    // Check that the metadata fields are been skipped when comparing same
+    // revisions, but the revision id was purged to enforce the creation of a
+    // new revision on save.
+    // Revision metadata field revision_timestamp.
+    $node = $storage->loadUnchanged($node->id());
+    $node->setRevisionCreationTime(time() + 1);
+    $node->setNewRevision(TRUE);
+    $this->assertFalse($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found no changes when comparing different revisions.');
+    // Revision metadata field revision_uid.
+    $node = $storage->loadUnchanged($node->id());
+    $node->setRevisionAuthorId($user1->id());
+    $node->setNewRevision(TRUE);
+    $this->assertFalse($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found no changes when comparing different revisions.');
+    // Revision metadata field revision_log.
+    $node = $storage->loadUnchanged($node->id());
+    $node->revision_log = $this->randomString(8);
+    $node->setNewRevision(TRUE);
+    $this->assertFalse($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found no changes when comparing different revisions.');
+    // Revision metadata field revision_translation_affected.
+    $node = $storage->loadUnchanged($node->id());
+    $node->setRevisionTranslationAffected(TRUE);
+    $node->setNewRevision(TRUE);
+    $this->assertFalse($node->hasTranslationChanges(), 'ContentEntityBase::hasTranslationChanges found no changes when comparing different revisions.');
+  }
+
+}
