This is the problem. For some reason this statement never returns false even though data is being sent.
while(!(SoftwareSerialObj.available() > 0));
Solved. I had too many software serial ports listening. Switching to AltSoftwareSerial fixes it. I'll be using an ATmega2560 from here on out to avoid this all together.