Request the password from the user at startup and store the key in memory for all new key encryption. Each ekey in the wallet is decrypted and the privkey derived and checked against the stored pubkey to ensure the password is correct.
Thanks to jgarzik for the original patch and sipa for all his input.
Forum thread: http://www.bitcoin.org/smf/index.php?topic=7405