diff -u b/core/modules/workflows/src/Entity/Workflow.php b/core/modules/workflows/src/Entity/Workflow.php
--- b/core/modules/workflows/src/Entity/Workflow.php
+++ b/core/modules/workflows/src/Entity/Workflow.php
@@ -437,14 +437,15 @@
       throw new \InvalidArgumentException("The state '$to_state_id' does not exist in workflow '{$this->id()}'");
     }
 
-    if ($this->transitions[$transition_id]['from']) {
-      foreach ($this->transitions[$transition_id]['from'] as $from_state_id) {
-        if ($this->hasTransitionFromStateToState($from_state_id, $to_state_id)) {
-          $transition = $this->getTransitionFromStateToState($from_state_id, $to_state_id);
-          if ($transition_id !== $transition->id()) {
-            throw new \InvalidArgumentException("The '{$transition->id()}' transition already allows '$from_state_id' to '$to_state_id' transitions in workflow '{$this->id()}'");
-          }
-        }
+    // If there is no change there is no need to validate the transitions.
+    if ($this->transitions[$transition_id]['to'] === $to_state_id) {
+      return $this;
+    }
+
+    // Ensure we are not duplicating an an existing transition.
+    foreach ($this->transitions[$transition_id]['from'] as $from_state_id) {
+      if ($existing_transition_id = $this->getTransitionIdFromStateToState($from_state_id, $to_state_id)) {
+        throw new \InvalidArgumentException("The '{$existing_transition_id}' transition already allows '$from_state_id' to '$to_state_id' transitions in workflow '{$this->id()}'");
       }
     }
 
