so to simplify and clarify.
i have 100 btc in a wallet,
i choose to send 5btc to address xxxyz
bitcoin sends the entire 100btc to the system,
then directs 5 to xxxyz
and returns 95 to an address it makes from the keypool before hiding it
No. The above is true only if you have 100 BTC as one unspent output. Output is, simplifying, what you received in a transaction. So if you have 100 BTC which you received as a single output of a a single transaction, then what you above wrote is true.
But if you first received 10 BTC, then 30 BTC and then 60 BTC in three separate transactions, then you have in total 100 BTC but in three separate outputs. When you send coins, entire outputs need to be spent (not entire wallets), so if you send 5 BTC, bitcoin client will send the entire 10 BTC output (and this will be an input of the new transaction): it will generate 5 BTC output to xxxyz and 5 BTC output to a change address that you own. You will now have previous unspent outputs of 30 BTC and 60 BTC and a new output of 5 BTC.
(that is, assuming for simplification, that bitcoin client chooses the 10 BTC output to use for this transaction; if it chosen 30 BTC, then it would send 5 BTC and 25 BTC change and after the transaction you'd have previous unspent outputs of 10 BTC and 60 BTC and a new output of 25 BTC in your wallet).
Edit: corrected inputs into outputs.