HMC5883L reading problem

   Wire.requestFrom(0x1E, 6);
   if(6 <= Wire.available())

You request 6 bytes and immediately test if they are available, if this is not the case the whole if statement is skipped and loop starts over again. This may be a critical piece of timing.

Insert an active waiting loop that test if enough data is available with a max of ~1 second. Code below is not tested...

for (int i=0; i< 1000; i++)
{ 
if ( 6 >= Wire.available()) break;
delay(1);
}