Wire.requestFrom() hangs when there is an analogRead() after it

Just follow the rules, and it should work.

First of all, use 4k7 resistors to the 3.3V for the SCL and SDA line of the I2C-bus.
You may have to read this: Arduino Playground - I2CBi-directionalLevelShifter

Next, you don't have to wait for data. You are not reading from the chip, you are reading from the stream. Retrieving bytes from the chip has already been done by "requestFrom".
It doesn't matter how much data is read (1 byte, or many bytes), the Wire.requestFrom() function did tell the software already how many bytes should be read.
So, just use my code example.
See also the example here: Wire - Arduino Reference
Read also the section about "available" here : Arduino Playground - WireLibraryDetailedReference

For a good analog value, you should wait sometime. Add some delay before reading the analog value, like I wrote before.