Sendmany cares about what "account" the BTC are in - you have passed an empty string - those 2 BTC must be in the "account" named the empty string for it to work. Try the listaccounts RPC command. There's also a move command that moves coins between accounts. This phenomenon of "accounts" is internal to the client and I don't think it represents any attribute of the bitcoins themselves as seen by the network.

I use sendmany all the time for loading batches of Casascius Physical Bitcoins.

Companies claiming they got hacked and lost your coins sounds like fraud so perfect it could be called fashionable. I never believe them. If I ever experience the misfortune of a real intrusion, I declare I have been honest about the way I have managed the keys in Casascius Coins. I maintain no ability to recover or reproduce the keys, not even under limitless duress or total intrusion. Remember that trusting strangers with your coins without any recourse is, as a matter of principle, not a best practice. Don't keep coins online. Use paper or hardware wallets instead.

Sendmany cares about what "account" the BTC are in - you have passed an empty string - those 2 BTC must be in the "account" named the empty string for it to work. Try the listaccounts RPC command. There's also a move command that moves coins between accounts. This phenomenon of "accounts" is internal to the client and I don't think it represents any attribute of the bitcoins themselves as seen by the network.

I use sendmany all the time for loading batches of Casascius Physical Bitcoins.

I see. Is there any way to just sendmany from my wallet in general in a convenient way? I couldn't care less about accounts; I want to treat my wallet as one monolithic account but bitcoind won't let me.