I just sent bitcoins from one wallet to another to make my life easier. This was the goal, anyway. My balance in my new wallet went up, but it's still not available after 3 hours. Why might this be? I'm using MultiBit on Mac OS X.
When you create a Bitcoin transaction, your client will broadcast that information to peer nodes and generally within seconds every node that is connected will know of that transaction.
That's likely why the recipient wallet's balance rose.
That transaction though must be included in a mined block before the client you are using will allow those funds to be spent. Though technically the client could let you spend the funds before the transaction gets even one confirmation, that introduces more confusion and problems so the client has this restriction for these "unconfirmed" transaction.
So, the question remaining is why hasn't the transaction confirmed? Whether or not to include a transaction is at the discretion of Bitcoin miners (solo miners) and mining pools. If your transaction did not include a fee that is paid to the miners then sometimes it gets ignored for a while. This delay can range from an hour or two to more than a day.
Knowing the appropriate fee to pay will depend on how much data the transaction consumes. If you are a miner getting tiny payouts from your pool, your fee to send payment will be more expensive than most because each of those tiny payouts consumes data. Another egregious violator are the tiny payouts from the losing transactions on SatoshiDICE. Most everyone else can get by paying the minimum 0.0005 fee in scenarios where a fee is required or no fee at all when none needs to be paid.
So, the reason you can't spend the funds is likely because either no fee was paid or the fee that was paid wasn't large enough. In the future, if there is the need to spend the funds from a payment quickly, consider including a fee payment that will help ensure it is included in block in a timely manner.
You can also see more info on the transaction if you go to the Transactions tab, right click on it and choose 'View transaction details'.
On the screen that appears you can click the 'View in blockchain.info' button. This opens a browser with the transaction details in blockchain.info.
Blockchain.info will probably tell you the transaction is unconfirmed for the reasons Stephen described.