See my post above.
The first 10 bytes of that hex dump are the signature FLXIMG:xx: where xx is a 2 byte integer representing the # of payload bytes of raw compiled sketch that follows (in your case 15E0) and which should match the number of data bytes in the hex file. The hex file is in a certain format that also contains a lot more than just the payload - headers, addresses, CRC bytes, all of which are stripped before putting it back to back for transmission and storage into the external flash memory. And also the hex file is actually stored as hex ascii rather than raw bytes as in the case of the OTA transmitted and stored bytes. This is why when you Serial.print you need to tell it to interpret the bytes as ascii HEX and not as ascii chars - ie each byte becomes two 0-9,A-F characters.