How I now think the keypool works:
- wallet.dat contains 100 private/public key pairs
- key pairs are associated with your addresses as well as some (but not all?) transactions
- when a new address is created or a transaction occurs to/ from an address a key is pulled "from the bottom" of the key pool, with remaining keys left to be used at a future date and a new key repopulates "at the top"
- my wallet balance is based on private keys for both addresses and transactions, and then verified against the block chain
- restoring from a backup will maintain my current balance, so long as fewer than 100 actions have taken place since the backup (address creation and transactions)
- the keypool can be made larger (in some way that I haven't figured out how to do on my mac yet)
Clarification a new address isn't used when you RECEIVE funds to an existing address. It is only used when you SEND funds from an existing address (the new address is used for change).