*I understand some are used up for behind-the-scenes purposes, so you shouldn't expect a full 100 to use directly yourself.
So (again, assuming I've understood all this right myself) it looks like all you would need to avoid these problems is to make one copy your "Primary" wallet, and regularly replace the others with fresh copies of it.
But there's another problem it won't fix. That pregenerated address pool can be helpful, but it can also get you in trouble. Because when you add a "new" address in one copy of the wallet it might already be one you used in a different copy. That could be confusing, e.g. if you unknowingly give the same address to but both Alice and Bob to accept a 5 BTC payment from each, and 5 BTC appears, you might at first thing they both paid, but then you realize it's the same address and you've only been paid once... but by whom?
All correct.
Another thing to take into account is that with the Satoshi client, a new key is used for sending as well as when you generate a new receiving address.
Example: You have 1 BTC on a key, which we'll call key #1. You send .8 BTC to Bob, who has key #2. With the Satoshi client, you are actually making two exchanges:
- from key #1 to key #2 for .8 BTC
- from key #1 to key #3 for .2 BTC
I'm not really sure why this design decision was made - I suppose it does add some small amount of obscurity, since there is no way to tell if the transaction was for .8 BTC or for .2 BTC, but it doesn't seem worthwhile to me. The mobile client I use, Bitcoin Spinner, uses one address from start to finish. To accept payments, I'll sometimes pop onto instawallet and make a new wallet for the transaction. Once it goes through, I forward the proceeds on to my primary address, to avoid the "who just paid me?" issue, above.
Bitcoin is complex, but not complicated (if that makes sense).