That BSS138 level-converting circuit has served me well in the past... it originally came via Rocket Number Nine from Herman Shutter inside Phillips? I still use the BSS138 approach for interfacing single signals as the circuit is dirt simple, easy to lay out and uses inexpensive components. But it is tedious to lay out lots of components on the board as well as stocking them onto the board when the time comes for mounting and reflowing everything.
So, for collections of signals I prefer using a TXB0104-TXB0108. Like the BSS-138 circuit, these converters are bidirectional, perfect for interfacing an 5V Arduino to a 3.3V SD card holder, for example. But only three components are needed, i.e. the chip and the two de-coupling capacitors. The TXS series can be used for I2C. Adafruit sells a converter breakout board based on the TXB0108.