Topping up the keypool in a separate thread adds indeterminism which scares me. I'd rather the state of the wallet be known when walletpassphrase returns ("full keypool, unlocked").

E.g. if the keypool is completely exhausted, and I do 'walletpassphrase' immediately followed by a 'send', will I always get a fresh 'change' key or not?  Separate thread == maybe, maybe not....