Multi-byte I2C read not working while "equivalent" Arduino one does
My guess would be that you somehow don't generate the ACK (SDA low) bit properly after each byte. Since you are the master, you can control the timing. Please study this function that is used to get multiple bytes from the i2c bus. It's the three lines after the for loop that you need to get correct.

int I2cGetOctetAndAck(){
    register int result = 0;
    register int i;
    I2C_RELEASE_SDA(); //SDA to Z state, pull-up via resistor
    for (i=0; i&lt;8; i++){ //clock in 8 bits
        I2C_CLOCK_HIGH();
        result &lt;&lt;= 1;
        result |= SDA_PIN;
        I2C_CLOCK_LOW();
    }
    I2C_DRIVE_SDA(); // SDA from Z state to LOW state for generating ACK
    I2C_CLOCK_HIGH(); // SCL HIGH, macro includes delay
    I2C_CLOCK_LOW(); // SCL LOW, macro includes delay
    return result;
}