Is it possible to write a bot that will monitor for losing bets and then try to cancel it by double spending the money to a wallet controlled by himself?
If he controls a large pool he could direct it to give preference to his cancellation transaction to make sure it propagates faster.
Is this possible in practice? How does SDICE defend against it?
I think a more practical attack would be to always get your pool to attempt to mine a block which includes a transaction that spends your coins to yourself, then as soon as you find a block, hold off publishing it for a few seconds while you place a bet at SD double-spending those same coins on "lessthan 1000". On the rare occasion that your bet wins, you "forget" to publish the block your pool found (maybe claim some other pool beat you to it), and let the winning SD bet stand. The rest of the time you publish your block, which effectively cancels your losing SD bet.
I don't know if this happens in practice, or whether SD has anything in place to prevent it working.
I haven't seen it happen yet. SD has no possible way to prevent it from working, other than pay back after multiple confirmations.
http://blockchain.info/double-spends lists double-spends, but to get to the unconfirmed transaction you have to click twice; not very convenient when looking for a double-spend where the tx to satoshidice was orphaned.
Also, fair warning - next week I'll be travelling to Macau, the gambling capital of Asia, to present at a gaming conference. I'll be showing SatoshiDICE to many people, including gambling entrepreneurs and business men.
It is possible that certain business deals could happen as a result of this trip. If you were considering buying shares of S.DICE, you may want to do it quickly. Who knows what a rich Macau gambling magnate might think of a system which allows wagering in any amount, from anywhere in the world, anonymously...

Quoted for austerity.
~Dalkore

I hope you mean posterity