How does ScriptPubKey know the public key of an Bitcoin address? I am currently having a blonde moment. 

The ScriptPubKey provides a hashed version of the receivers public key. 


  scriptPubKey  OP_DUP OP_HASH160  OP_EQUALVERIFY
  OP_CHECKSIG


However, if I give someone my bitcoin address to send me money - how does the sender retrieve my public key and then hash it? As the pubKeyHash != my bitcoin address

I am probably forgetting something very obvious - but it has had my head bambuzzled this morning.
Addresses are really just shorthands for particular scripts. The standard address type (starting with a '1' on mainnet) does in fact correspond to the exact type of script you gave above.

If you base58 decode such an address, you end up with a byte string of the form 0x00 + [20-byte hash] + [4-byte checksum]. The corresponding script is OP_DUP OP_HASH160 [20-byte hash] OP_EQUALVERIFY OP_CHECKSIG.

So, in a way, your address does contain the public key's hash.