diff --git a/src/Controller/UpdateController.php b/src/Controller/UpdateController.php
index 54737ec0bbd86c80ca091b0079121099910afdea..a15c18424e91bb56ecb8e592da5d344a9e6f637b 100644
--- a/src/Controller/UpdateController.php
+++ b/src/Controller/UpdateController.php
@@ -4,6 +4,7 @@ namespace Drupal\automatic_updates\Controller;
 
 use Drupal\automatic_updates\BatchProcessor;
 use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\Core\State\StateInterface;
 use Drupal\Core\Url;
 use Drupal\package_manager\Validator\PendingUpdatesValidator;
@@ -74,6 +75,17 @@ class UpdateController extends ControllerBase {
       // previously not in maintenance mode.
       if (!$request->getSession()->remove(BatchProcessor::MAINTENANCE_MODE_SESSION_KEY)) {
         $this->state()->set('system.maintenance_mode', FALSE);
+        // @todo Remove once the core bug that shows the maintenance mode
+        //   message after the site is out of maintenance mode is fixed in
+        //   https://www.drupal.org/i/3279246.
+        $messages = $this->messenger()->messagesByType(MessengerInterface::TYPE_STATUS);
+        $messages = array_filter($messages, function (string $message) {
+          return !str_starts_with($message, (string) $this->t('Operating in maintenance mode.'));
+        });
+        $this->messenger()->deleteByType(MessengerInterface::TYPE_STATUS);
+        foreach ($messages as $message) {
+          $this->messenger()->addStatus($message);
+        }
       }
     }
     $this->messenger()->addStatus($message);
diff --git a/tests/src/Functional/UpdaterFormTest.php b/tests/src/Functional/UpdaterFormTest.php
index d6caa165ba67458ac5f14885a7703060adbc7b5b..3cb2c6f8aff3ecab29eaf58a8fd3f090cabcd6b6 100644
--- a/tests/src/Functional/UpdaterFormTest.php
+++ b/tests/src/Functional/UpdaterFormTest.php
@@ -579,7 +579,7 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase {
     $this->assertUpdateStagedTimes(1);
     $this->assertUpdateReady('9.8.1');
     // Confirm that the site was put into maintenance mode if needed.
-    $this->assertSame($state->get('system.maintenance_mode'), $maintenance_mode_on);
+    $this->assertMaintenanceMode($maintenance_mode_on);
     $page->pressButton('Continue');
     $this->checkForMetaRefresh();
     $assert_session->addressEquals('/admin/reports/updates');
@@ -589,7 +589,7 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase {
     $this->assertTrue($state->get(PreApplyEvent::class . '.system.maintenance_mode'));
     $assert_session->pageTextContainsOnce('Update complete!');
     // Confirm the site was returned to the original maintenance mode state.
-    $this->assertSame($state->get('system.maintenance_mode'), $maintenance_mode_on);
+    $this->assertMaintenanceMode($maintenance_mode_on);
   }
 
   /**
@@ -678,6 +678,25 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase {
     return $message;
   }
 
+  /**
+   * Asserts maintenance is the expected value and correct message appears.
+   *
+   * @param bool $expected_maintenance_mode
+   *   Whether maintenance mode is expected to be on or off.
+   */
+  private function assertMaintenanceMode(bool $expected_maintenance_mode): void {
+    $this->assertSame($this->container->get('state')
+      ->get('system.maintenance_mode'), $expected_maintenance_mode);
+    if ($expected_maintenance_mode) {
+      $this->assertSession()
+        ->pageTextContains('Operating in maintenance mode.');
+    }
+    else {
+      $this->assertSession()
+        ->pageTextNotContains('Operating in maintenance mode.');
+    }
+  }
+
   /**
    * Asserts that no update buttons exist.
    */