It's really just the same rule. You can't have 2 live transactions (those with unspent outputs) with the same hash.
No, it is a different rule.
BIP 30 essentially says that once all outputs are spent, it can appear again. But it is possible to create a transaction and spent all its outputs within one block, isn't it? Thus this transaction won't be live.
Hmm, this is interesting. It basically says that "This is caught by ConnectInputs()", but is it?
Perhaps it is meant that CheckInputs will detect transactions which try to spend same outputs, but in theory if transactions can reappear, it would be different outputs.
So it is possible that line 2105 is a rule on its own...
Basically from the view of the reference client, there is no need for the identifier to be unique forever. The only need for looking up transactions is to get their unspent outputs. Once the outputs are spent, they never need to be looked up again, so the identifier can be reused.
Yep. Unfortunately this doesn't work so well for colored coins...