An incomplete shard snapshot will prevent a shard from moving away from a node (see `SnapshotInProgressAllocationDecider`). That means that when a shard snapshot completes it may become possible to perform some shard movements that previously were not possible, so we should trigger a reroute to start those movements. AFAICT we do not trigger such a reroute today.
server/src/main/java/org/elasticsearch/snapshots/SnapshotsService.java
+ ", updatedState="
                + updatedState
                + '}';
        }
    }
    private void innerUpdateSnapshotState(
        Snapshot snapshot,
        ShardId shardId,
        RepositoryShardId repoShardId,
        ShardSnapshotStatus updatedState,
        ActionListener<Void> listener
    ) {
        var update = new ShardSnapshotUpdate(snapshot, shardId, repoShardId, updatedState, listener.delegateFailure((delegate, result) -> {
            try {
                delegate.onResponse(null);
            } finally {
                
                
                final SnapshotsInProgress snapshotsInProgress = result.snapshotsInProgress();
                if (endingSnapshots.contains(snapshot) == false) {
                    final SnapshotsInProgress.Entry updatedEntry = snapshotsInProgress.snapshot(snapshot);
                    
                    if (updatedEntry != null && updatedEntry.state().completed()) {
                        endSnapshot(updatedEntry, result.metadata(), null);
                    }
                }
                startExecutableClones(snapshotsInProgress, snapshot.getRepository());
            }
        }));
        logger.trace("received updated snapshot restore state [{}]", update);