Well, I shut down bitcoind and backed up my wallet immediately, but it never reported that I had more blocks to wait before they matured. I just assumed that was the problem. I did start up bitcoind after making the backup, just in case the transaction could still go through.
Using Gavin’s bitcoin tools, I can see that the transaction is still in my wallet, and that the coins are still marked as spent, but neither my bitcoin nor the recipient’s shows the transaction as having gone through.