diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index 7c0a458..a23db51 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -96,6 +96,15 @@
   protected $activeLangcode = LanguageInterface::LANGCODE_DEFAULT;
 
   /**
+   * Can be used to override isDefaultTranslation() result.
+   *
+   * @var null|bool
+   *
+   * @internal
+   */
+  public $isDefaultTranslation = NULL;
+
+  /**
    * Local cache for the default language code.
    *
    * @var string
@@ -322,6 +331,9 @@ public function setRevisionTranslationAffected($affected) {
    * {@inheritdoc}
    */
   public function isDefaultTranslation() {
+    if (isset($this->isDefaultTranslation)) {
+      return $this->isDefaultTranslation;
+    }
     return $this->activeLangcode === LanguageInterface::LANGCODE_DEFAULT;
   }
 
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
index afdce40..7cf1266 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
@@ -463,6 +463,14 @@ protected function invokeFieldMethod($method, ContentEntityInterface $entity) {
       $original_langcodes = array_keys($entity->original->getTranslationLanguages());
       foreach (array_diff($original_langcodes, $langcodes) as $removed_langcode) {
         $translation = $entity->original->getTranslation($removed_langcode);
+
+        // Fields may rely on the isDefaultTranslation() method to determine
+        // what is going to be deleted - the whole entity or a particular
+        // translation.
+        if ($translation->isDefaultTranslation()) {
+          $translation->isDefaultTranslation = FALSE;
+        }
+
         $fields = $translation->getTranslatableFields();
         foreach ($fields as $name => $items) {
           $items->delete();
