Protecting 3.3V I2C lines
I like your first approach better, but you can lose R1.  There is already a maximum pullup current spec for IIC, so D1 only needs to be able to handle that.  If something outside has a pullup to 5V, the diode will still clamp the voltage nicely with well bounded current.