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.