OK, you're right, the requirement that you didn't see the double spend transaction in the block yet does seem to solve this.
The only thing that bugs me is what if there's a race condition such that I can overlap this with the discovery of a new block. Thinking out loud here. Let's say I directly connect to as many mining nodes as possible. I can create two transactions, A->X and A->Y and pick one transaction for half the nodes, another for the other half....
I'm lost. Who are X and Y? You're going to spam the network with payments to X == yourself and Y == the corner grocery store in the hopes of... what?
Remember the original attack:
To cheat you, when he generates a block, he doesn't broadcast it. Instead, he runs down to your store and makes a payment to your address C with his address A. You wait a few seconds, don't hear anything, and transfer the goods. He broadcasts his block now, and his transaction will take precedence over yours.
Again, it seems to me some rules that make attempted double-spends more costly to those who attempt to pull off double-spends might be a good idea.
theymos' objection (that there's no real incentive for miners to try to detect/punish double spends) is worth thinking about. Is there enough "interest in the common good" for miners to spend some CPU cycles so that the bitcoin system as a whole is more robust, or would self-interest lead to a tragedy of the commons where miners do the absolute minimum to just get their blocks accepted?
bfever: my gut reaction is that the "fast payment problem" won't be solved by more complicated transactions. And my gut reaction to more complicated transactions is that that the more complicated something is the more likely it is to have security holes....