MPU6050 readings not correct

The return type is the type of the left operand after integral promotions.

My reading of the above suggests that, if Wire.read() returns a byte, the result is a byte, further suggesting that the result of Wire.read()<<8 would always be zero.

That suspicion is supported by the result of the following little program, which prints "0":

byte shift8 (byte x) {return x<<8;}

void setup() {
  Serial.begin(9600);
  int y= shift8(1);
  Serial.println(y);
}
void loop(){
}

On the other hand, it appears that the AVR hardware library version of Wire.read() actually returns an int, so the discussion may be moot:

// must be called in:
// slave rx event callback
// or after requestFrom(address, numBytes)
int TwoWire::read(void)
{
  int value = -1;
  
  // get each successive byte on each call
  if(rxBufferIndex < rxBufferLength){
    value = rxBuffer[rxBufferIndex];
    ++rxBufferIndex;
  }

  return value;
}