diff --git a/homeassistant/components/backup/manager.py b/homeassistant/components/backup/manager.py
index 4d509003a218ff76926b77014ee1d6810f883b28..2fbd5014847793e004ac0e4915b8bb5f7c320196 100644
--- a/homeassistant/components/backup/manager.py
+++ b/homeassistant/components/backup/manager.py
@@ -800,12 +800,10 @@ class BackupManager:
         """Finish a backup."""
         if TYPE_CHECKING:
             assert self._backup_task is not None
+        backup_success = False
         try:
             written_backup = await self._backup_task
         except Exception as err:
-            self.async_on_backup_event(
-                CreateBackupEvent(stage=None, state=CreateBackupState.FAILED)
-            )
             if with_automatic_settings:
                 self._update_issue_backup_failed()
 
@@ -831,33 +829,15 @@ class BackupManager:
                     agent_ids=agent_ids,
                     open_stream=written_backup.open_stream,
                 )
-            except BaseException:
-                self.async_on_backup_event(
-                    CreateBackupEvent(stage=None, state=CreateBackupState.FAILED)
-                )
-                raise  # manager or unexpected error
             finally:
-                try:
-                    await written_backup.release_stream()
-                except Exception:
-                    self.async_on_backup_event(
-                        CreateBackupEvent(stage=None, state=CreateBackupState.FAILED)
-                    )
-                    raise
+                await written_backup.release_stream()
             self.known_backups.add(written_backup.backup, agent_errors)
-            if agent_errors:
-                self.async_on_backup_event(
-                    CreateBackupEvent(stage=None, state=CreateBackupState.FAILED)
-                )
-            else:
+            if not agent_errors:
                 if with_automatic_settings:
                     # create backup was successful, update last_completed_automatic_backup
                     self.config.data.last_completed_automatic_backup = dt_util.now()
                     self.store.save()
-
-                self.async_on_backup_event(
-                    CreateBackupEvent(stage=None, state=CreateBackupState.COMPLETED)
-                )
+                backup_success = True
 
             if with_automatic_settings:
                 self._update_issue_after_agent_upload(agent_errors)
@@ -868,6 +848,14 @@ class BackupManager:
         finally:
             self._backup_task = None
             self._backup_finish_task = None
+            self.async_on_backup_event(
+                CreateBackupEvent(
+                    stage=None,
+                    state=CreateBackupState.COMPLETED
+                    if backup_success
+                    else CreateBackupState.FAILED,
+                )
+            )
             self.async_on_backup_event(IdleEvent())
 
     async def async_restore_backup(