1) The 50 bitcoin generation transaction included with every new block - how is this 50 number decided? I know the protocol is designed to gradually reduce and cap the number of coins at 21 million, but what stops someone releasing a miner which tries to give itself 1000 bitcoins in the generation transaction? Is there some kind of cryptographic assurance of how many bitcoins are allowed in this transaction or is it just hardcoded into the various clients and miners?
Other nodes. Your coins only have validity if they are accepted by other clients. Kinda like a dollar is only worth a dollar if someone will accept it. If you mine a block which breaks protocol rules then it will be rejected by other clients and is worthless. The "rules" (which are part of every client) says that the reward starts at 50 BTC and specifies the algorithm under which it is reduced (by halving) until 0 BTC (@ block 6,300,000).
2) How is the difficulty/target agreed upon? It seems easy enough to calculate what the difficulty SHOULD be based on the block generation rate for the past X time (a week I think), but what stops the people who write GPU mining software from changing the algorithm to lower the difficulty? Especially given that it would, in the short term at least, be beneficial to the miners to have a lower-than-it-should-be difficulty in order to generate new blocks quicker.
Same as #1. All clients know how difficult every block should be. If a block which doesn't match expected difficulty is detected then it is rejected and any work does is worthless.