### Elasticsearch Version

7.13.3

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

ubuntu

### Problem Description

When doing a shrink, a copy of each shard is first reallocated to the one node. Then a shrink is initiated, which generates new shards. In case the chosen node is above the low watermark now, the shrunk index cannot be allocated to the node. Currently, this can result in an unnecessary scale up when using autoscaling.

This relates to the work in #76206 in that fixing that one would reduce the risk of this occurring. We also have thoughts around retries in ILM to fix a stuck shrink. However, we would still need to ensure autoscaling would not scale up unnecessarily in this case (but still scale up if that is theonly  way to ensure the shrink succeeds).

### Steps to Reproduce

NA

### Logs (if relevant)

_No response_
x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/storage/ReactiveStorageDeciderService.java
@Override
    public AutoscalingDeciderResult scale(Settings configuration, AutoscalingDeciderContext context) {
        AutoscalingCapacity autoscalingCapacity = context.currentCapacity();
        if (autoscalingCapacity == null || autoscalingCapacity.total().storage() == null) {
            return new AutoscalingDeciderResult(null, new ReactiveReason("current capacity not available", -1, -1));
        }
        AllocationState allocationState = allocationState(context);
        var assignedBytesUnmovableShards = allocationState.storagePreventsRemainOrMove();
        long assignedBytes = assignedBytesUnmovableShards.sizeInBytes();
        var unassignedBytesUnassignedShards = allocationState.storagePreventsAllocation();
        long unassignedBytes = unassignedBytesUnassignedShards.sizeInBytes();
        long maxShardSize = allocationState.maxShardSize();
        assert assignedBytes >= 0;
        assert unassignedBytes >= 0;
        assert maxShardSize >= 0;
        String message = message(unassignedBytes, assignedBytes);
        AutoscalingCapacity requiredCapacity = AutoscalingCapacity.builder()
            .total(autoscalingCapacity.total().storage().getBytes() + unassignedBytes + assignedBytes, null, null)
            .node(maxShardSize, null, null)
            .build();
        return new AutoscalingDeciderResult(
            requiredCapacity,
            new ReactiveReason(
                message,
                unassignedBytes,
                unassignedBytesUnassignedShards.shardIds(),
                assignedBytes,
                assignedBytesUnmovableShards.shardIds()
            )
        );