Is a script spendable if multiple items are left on the stack?
Yes, this is the problem.

Pre-segwit there is a standardness rule in Bitcoin Core that requires a single element only on the stack after execution.

In P2WSH, this is part of the consensus rules.

The reason for this is that without such a rule it is trivial to malleate any transaction: just prefix the scriptSig with additional garbage elements, which would never be inspected by the locking script, and thus just passed through.