Closes #23285 by adding CheckMinimalPush() in MatchMultisig() in solver.cpp which is only used for policy checks (not consensus).
First commit asserts current behavior on master with unit and functional tests, second commit tightens the policy.
I noticed CheckMinimalPush() has an assert(0 <= opcode && opcode <= OP_PUSHDATA4). That continues to be protected by GetScriptOp() which has guard if (opcode <= OP_PUSHDATA4)
To address concern about current usage I claude-generated this script which efficiently scanned all blk*.dat files from a fully-synced node and reported all occurrences of this oddity (report below).