Now on the Imp device side I want to read each byte and place them in a blob, which I send the whole blob to a function in the agent side that will parse the bytes and concatenate LowerByte and UpperByte.

The Mega is a 5V board and the imp is a 3.3v one. How is this difference being handled? Also, you can do a loopback test on either one by wiring RX to TX and of course test reading what you write to the uart.

So it sounds like you're getting data, but it's "out of sync"? You are not checking the data you are reading from the UART is -1 (indicating no more data available). That shouldn't necessarily be an issue, but it's generally good practice.

Also, the software serial booting on the arduino side will almost certainly glitch the line enough to cause the imp to get one byte out of sync.

Generally, serial protocols have a way to regain sync - be it a start of packet marker, or an end of packet signal. In general, I would suggest here, for clarity, to simply use text to send the value, and then a CR to terminate the line.