diff --git a/core/modules/layout_builder/layout_builder.module b/core/modules/layout_builder/layout_builder.module
index cf1fcc9be6..8260df6207 100644
--- a/core/modules/layout_builder/layout_builder.module
+++ b/core/modules/layout_builder/layout_builder.module
@@ -27,6 +27,7 @@
 use Drupal\Core\Access\AccessResult;
 use Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage;
 use Drupal\layout_builder\QuickEditIntegration;
+use Drupal\layout_builder\LayoutOverrideFieldHelper;
 
 /**
  * Implements hook_help().
@@ -218,6 +219,28 @@ function layout_builder_entity_delete(EntityInterface $entity) {
   }
 }
 
+/**
+ * Implements hook_entity_update().
+ */
+function layout_builder_entity_update(EntityInterface $entity) {
+  $route_name = \Drupal::routeMatch()->getRouteName();
+
+  // See if the entity's layout must be updated with the new entity values if:
+  // 1. The entity is not being saved via the Layout Builder UI
+  // 2. It is a fieldable layout
+  // 3. A layout override field is present.
+  // @todo Remove instanceof FieldableEntityInterface check in
+  //   https://www.drupal.org/node/3046216
+  if (strpos($route_name, 'layout_builder.') !== 0 && $entity instanceof FieldableEntityInterface && $entity->hasField('layout_builder__layout')) {
+    // If an entity's field values change and it also has a layout override in
+    // the tempstore, the tempstore must be updated to reflect those new
+    // values.
+    /** @var \Drupal\layout_builder\LayoutOverrideFieldHelper $override_field_helper */
+    $override_field_helper = \Drupal::classResolver(LayoutOverrideFieldHelper::class);
+    $override_field_helper->updateTempstoreEntityContext($entity);
+  }
+}
+
 /**
  * Implements hook_cron().
  */
diff --git a/core/modules/layout_builder/src/LayoutEntityHelperTrait.php b/core/modules/layout_builder/src/LayoutEntityHelperTrait.php
index 1abf322178..b65ea0420d 100644
--- a/core/modules/layout_builder/src/LayoutEntityHelperTrait.php
+++ b/core/modules/layout_builder/src/LayoutEntityHelperTrait.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Plugin\Context\Context;
 use Drupal\Core\Plugin\Context\ContextDefinition;
 use Drupal\Core\Plugin\Context\EntityContext;
+use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;
 use Drupal\layout_builder\Entity\LayoutEntityDisplayInterface;
 
 /**
@@ -155,4 +156,45 @@ private function sectionStorageManager() {
     return $this->sectionStorageManager ?: \Drupal::service('plugin.manager.layout_builder.section_storage');
   }
 
+  /**
+   * Update a layout overrides's entity context when entity values change.
+   *
+   * @param \Drupal\Core\Entity\FieldableEntityInterface $entity
+   *   The entity with the overridden layout.
+   *
+   * @return \Drupal\layout_builder\SectionStorageInterface
+   *   The section storage.
+   */
+  public function getSectionStorageFromEntity(FieldableEntityInterface $entity) {
+    $contexts = $this->getSectionStorageContextFromEntity($entity);
+
+    $contexts['entity'] = EntityContext::fromEntity($entity);
+    $contexts['view_mode'] = new Context(new ContextDefinition('string'), 'default');
+    return $this->sectionStorageManager()->load('overrides', $contexts);
+  }
+
+  /**
+   * Update a layout overrides's entity context when entity values change.
+   *
+   * @param \Drupal\Core\Entity\FieldableEntityInterface $entity
+   *   The entity with the overridden layout.
+   *
+   * @return \Drupal\Core\Plugin\Context\ContextInterface[]
+   *   The section storage contexts.
+   */
+  public function getSectionStorageContextFromEntity(FieldableEntityInterface $entity) {
+    $contexts = [];
+
+    $contexts['entity'] = EntityContext::fromEntity($entity);
+    // @todo Expand to work for all view modes in
+    //   https://www.drupal.org/node/2907413.
+    $view_mode = 'full';
+    // Retrieve the actual view mode from the returned view display as the
+    // requested view mode may not exist and a fallback will be used.
+    $view_mode = LayoutBuilderEntityViewDisplay::collectRenderDisplay($entity, $view_mode)->getMode();
+    $contexts['view_mode'] = new Context(new ContextDefinition('string'), $view_mode);
+
+    return $contexts;
+  }
+
 }
diff --git a/core/modules/layout_builder/src/LayoutOverrideFieldHelper.php b/core/modules/layout_builder/src/LayoutOverrideFieldHelper.php
new file mode 100644
index 0000000000..dc75494d3e
--- /dev/null
+++ b/core/modules/layout_builder/src/LayoutOverrideFieldHelper.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace Drupal\layout_builder;
+
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\layout_builder\SectionStorage\SectionStorageManagerInterface;
+use Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Class LayoutOverrideFieldHelper.
+ *
+ * @package Drupal\layout_builder.
+ */
+class LayoutOverrideFieldHelper implements ContainerInjectionInterface {
+
+  use LayoutEntityHelperTrait;
+
+  /**
+   * The section storage manager.
+   *
+   * @var \Drupal\layout_builder\SectionStorage\SectionStorageManagerInterface
+   */
+  protected $sectionStorageManager;
+
+  /**
+   * The layout tempstore repository.
+   *
+   * @var \Drupal\layout_builder\LayoutTempstoreRepositoryInterface
+   */
+  protected $layoutTempstoreRepository;
+
+  /**
+   * LayoutOverrideFieldHelper constructor.
+   *
+   * @param \Drupal\layout_builder\SectionStorage\SectionStorageManagerInterface $section_storage_manager
+   *   The section storage manager.
+   * @param \Drupal\layout_builder\LayoutTempstoreRepositoryInterface $layout_tempstore_repository
+   *   The layout tempstore repository.
+   */
+  public function __construct(SectionStorageManagerInterface $section_storage_manager, LayoutTempstoreRepositoryInterface $layout_tempstore_repository) {
+    $this->sectionStorageManager = $section_storage_manager;
+    $this->layoutTempstoreRepository = $layout_tempstore_repository;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.layout_builder.section_storage'),
+      $container->get('layout_builder.tempstore_repository')
+    );
+  }
+
+  /**
+   * Update a layout overrides's entity context when entity values change.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity with the overridden layout.
+   */
+  public function updateTempstoreEntityContext(EntityInterface $entity) {
+    if ($section_storage = $this->getSectionStorageFromEntity($entity)) {
+
+      // This is only necessary if there is a layout override in the tempstore.
+      if ($this->layoutTempstoreRepository->has($section_storage)) {
+        /** @var \Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage $override_temp_store */
+        $override_temp_store = $this->layoutTempstoreRepository->get($section_storage);
+
+        // Get the entity currently in the tempstore's entity context.
+        $stored_entity = $override_temp_store->getContext('entity')->getContextData()->getEntity();
+
+        // Update the tempstore entity context with a copy of the new entity,
+        // but retain the value of the layout field from the tempstore.
+        $updated_entity = $entity;
+        $updated_entity->{OverridesSectionStorage::FIELD_NAME} = $stored_entity->{OverridesSectionStorage::FIELD_NAME};
+
+        $override_temp_store->setContextValue('entity', $updated_entity);
+        $this->layoutTempstoreRepository->set($override_temp_store);
+      }
+    }
+  }
+
+}
diff --git a/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php b/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
index d6c0729643..43515e71e4 100644
--- a/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
+++ b/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
@@ -11,12 +11,11 @@
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Entity\TranslatableInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Plugin\Context\Context;
-use Drupal\Core\Plugin\Context\ContextDefinition;
 use Drupal\Core\Plugin\Context\EntityContext;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
 use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;
+use Drupal\layout_builder\LayoutEntityHelperTrait;
 use Drupal\layout_builder\OverridesSectionStorageInterface;
 use Drupal\layout_builder\SectionStorage\SectionStorageManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -48,6 +47,8 @@
  */
 class OverridesSectionStorage extends SectionStorageBase implements ContainerFactoryPluginInterface, OverridesSectionStorageInterface, SectionStorageLocalTaskProviderInterface {
 
+  use LayoutEntityHelperTrait;
+
   /**
    * The field name used by this storage.
    *
@@ -165,16 +166,8 @@ public function getTempstoreKey() {
    */
   public function deriveContextsFromRoute($value, $definition, $name, array $defaults) {
     $contexts = [];
-
     if ($entity = $this->extractEntityFromRoute($value, $defaults)) {
-      $contexts['entity'] = EntityContext::fromEntity($entity);
-      // @todo Expand to work for all view modes in
-      //   https://www.drupal.org/node/2907413.
-      $view_mode = 'full';
-      // Retrieve the actual view mode from the returned view display as the
-      // requested view mode may not exist and a fallback will be used.
-      $view_mode = LayoutBuilderEntityViewDisplay::collectRenderDisplay($entity, $view_mode)->getMode();
-      $contexts['view_mode'] = new Context(new ContextDefinition('string'), $view_mode);
+      $contexts = $this->getSectionStorageContextFromEntity($entity);
     }
     return $contexts;
   }
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/FieldValuesTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/FieldValuesTest.php
new file mode 100644
index 0000000000..ed36af94d9
--- /dev/null
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/FieldValuesTest.php
@@ -0,0 +1,120 @@
+<?php
+
+namespace Drupal\Tests\layout_builder\FunctionalJavascript;
+
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+
+/**
+ * Tests how Layout Builder handles changes to entity fields.
+ *
+ * @group layout_builder
+ */
+class FieldValuesTest extends WebDriverTestBase {
+
+  /**
+   * Path prefix for the field UI for the test bundle.
+   *
+   * @var string
+   */
+  const FIELD_UI_PREFIX = 'admin/structure/types/manage/bundle_for_testing_fields';
+
+  public static $modules = [
+    'layout_builder',
+    'block',
+    'node',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->createContentType(['type' => 'bundle_for_testing_fields']);
+
+    $this->drupalLogin($this->drupalCreateUser([
+      'access content',
+      'configure any layout',
+      'administer node display',
+      'administer nodes',
+      'bypass node access',
+    ]));
+
+    // Enable layout builder.
+    $this->drupalPostForm(
+      static::FIELD_UI_PREFIX . '/display/default',
+      ['layout[enabled]' => TRUE],
+      'Save'
+    );
+
+    $this->createNode([
+      'type' => 'bundle_for_testing_fields',
+      'body' => [
+        [
+          'value' => 'The initial value',
+        ],
+      ],
+    ])->save();
+  }
+
+  /**
+   * Test that changes to fields are visible in layout and UI.
+   */
+  public function testUiCurrentWithEntityFieldChanges() {
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+
+    $this->drupalPostForm(
+      static::FIELD_UI_PREFIX . '/display/default',
+      ['layout[allow_custom]' => TRUE],
+      'Save'
+    );
+
+    $this->drupalGet('node/1');
+    $assert_session->pageTextContains('The initial value');
+    $this->drupalGet('node/1/layout');
+
+    // Change the Links block label in the override to confirm that these
+    // changes aren't removed when entity field values are updated.
+    $links_block = $assert_session->elementExists('css', '.block-extra-field-blocknodebundle-for-testing-fieldslinks');
+    $links_block_uuid = $links_block->getAttribute('data-layout-block-uuid');
+    $this->drupalGet('layout_builder/update/block/overrides/node.1/0/content/' . $links_block_uuid);
+    $page->checkField('settings[label_display]');
+    $overridden_label = 'This is a label in the override';
+    $page->fillField('settings[label]', $overridden_label);
+    $page->pressButton('Update');
+
+    $assert_session->pageTextContains('The initial value');
+    $assert_session->pageTextContains($overridden_label);
+
+    $changed_body_value = 'The changed value';
+    $this->drupalPostForm(
+      'node/1/edit',
+      ['body[0][value]' => $changed_body_value],
+      'Save'
+    );
+
+    // Confirm that changes to a field are seen in the Layout UI without
+    // altering a layout's changes in the tempstore.
+    $assert_session->pageTextContains($changed_body_value);
+    $assert_session->pageTextNotContains($overridden_label);
+    $this->drupalGet('node/1/layout');
+    $assert_session->pageTextContains($changed_body_value);
+    $assert_session->pageTextContains($overridden_label);
+
+    // Confirm the fields appear correctly after the override is saved and
+    // no tempstore is present.
+    $page->pressButton('Save layout');
+    $assert_session->pageTextContains($changed_body_value);
+    $assert_session->pageTextContains($overridden_label);
+    $this->drupalGet('node/1/layout');
+    $assert_session->pageTextContains($changed_body_value);
+    $assert_session->pageTextContains($overridden_label);
+  }
+
+}
