Gut beobachtet!
byte MSB = 0x88;
byte LSB = 0x88;
unsigned int _16bits = MSB << 8 | LSB;
unsigned long _32bits = MSB<< 8 | LSB;
Serial.println (_16bits, HEX);
Serial.println(_32bits, HEX);
Der Ausdruck (MSB<<8 | LSB) wird im Standard-Datenformat int gerechnet und das ergibt 0x8888 = -30584
-30584 ist aber FFFF8888, als (unsigned oder nicht) long interpretiert.
Bei unsigned int ( dein 2. Fall) merkst du es nur nicht, dass das das oberste Bit schon das Vorzeichen ist.