diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index 1e198fe..7eec790 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -1015,6 +1015,12 @@ public function __clone() {
       // adapter object.
       $this->typedData = NULL;
       $definitions = $this->getFieldDefinitions();
+
+      // Ensure the fields array is actually cloned by overwriting the original
+      // reference with one pointing to a copy of the array.
+      $fields = $this->fields;
+      $this->fields = &$fields;
+
       foreach ($this->fields as $name => $values) {
         $this->fields[$name] = array();
         // Untranslatable fields may have multiple references for the same field
diff --git a/core/modules/system/src/Tests/Entity/ContentEntityCloneTest.php b/core/modules/system/src/Tests/Entity/ContentEntityCloneTest.php
index 77d1603..66f25f6 100644
--- a/core/modules/system/src/Tests/Entity/ContentEntityCloneTest.php
+++ b/core/modules/system/src/Tests/Entity/ContentEntityCloneTest.php
@@ -67,4 +67,50 @@ public function testFieldEntityReferenceAfterClone() {
     }
   }
 
+  /**
+   * Tests if the entity fields are properly cloned.
+   */
+  public function testClonedEntityFields() {
+    $user = $this->createUser();
+
+    // Create a test entity.
+    $entity = EntityTestMul::create([
+      'name' => $this->randomString(),
+      'user_id' => $user->id(),
+      'language' => 'en',
+    ]);
+
+    $entity->addTranslation('de');
+    $entity->save();
+    $fields = array_keys($entity->getFieldDefinitions());
+
+    // Reload the entity, clone it and check that both entity objects reference
+    // different field instances.
+    $entity = $this->reloadEntity($entity);
+    $clone = clone $entity;
+
+    $different_references = TRUE;
+    foreach ($fields as $field_name) {
+      if ($entity->get($field_name) === $clone->get($field_name)) {
+        $different_references = FALSE;
+      }
+    }
+    $this->assertTrue($different_references, 'The entity object and the cloned entity object reference different field item list objects.');
+
+
+    // Reload the entity, initialize one translation, clone it and check that
+    // both entity objects reference different field instances.
+    $entity = $this->reloadEntity($entity);
+    $entity->getTranslation('de');
+    $clone = clone $entity;
+
+    $different_references = TRUE;
+    foreach ($fields as $field_name) {
+      if ($entity->get($field_name) === $clone->get($field_name)) {
+        $different_references = FALSE;
+      }
+    }
+    $this->assertTrue($different_references, 'The entity object and the cloned entity object reference different field item list objects if the entity is cloned after an entity translation has been initialized.');
+  }
+
 }
