Apart from the P2SH, there was:
* BIP34 (v2 blocks) - activated at block #227931. This change was about the block number value to be included in the coinbase.
* BIP66 (v3 blocks) - from block #363725. Disallowed some encoding of the signatures.
* BIP65 (v4 blocks) - block #388381. Support for OP_CHECKLOCKTIMEVERIFY.
* CSV (through BIP9) - active from block #419328. Support for OP_CHECKSEQUENCEVERIFY.
I think that's all. Plus the ongoing segwit.
Did the "OP_HASH160 <hash> OP_EQUAL" output just automatically require checking redeem scripts when it was implemented?
Redeem script is pushed onto the stack as one binary blob (as the last element, after public keys and signatures).
"OP_HASH160 <hash> OP_EQUAL" hashes that binary blob and compares against the required value.
Then (what BIP16 activation changed) is that the last binary blob is ten taken from the stack and executed as a regular script.
So basically it executes two different scripts, one after another: first the "OP_HASH160 <hash> OP_EQUAL" one, then the spending one.