The ILM shrink action can't succeed if the requested number_of_shards won't work with the index's number_of_shards. An example of that would be if the index currently has 3 shards, the policy tries to shrink it down to 2 shards.
Rather than running the set-single-node-allocation allocation step successfully and then failing at the shrink step, we should have validation that checks for this scenario and fails the shrink action without having moved the shards around.