I believe the problem is with the SERIAL_2X_UBBRVAL macro
how do you figure? The 57600bps special case was because the bootloader (which is "hard" to change) was using 57600 (as close as possible) without the "double-speed" option, while the usb/serial device was using 57600 as close as possible WITH the u2x option, and they were on opposite sides of "correct", making them far enough apart to not talk to each other (even though theoretically, each was with "allowable" tolerance WRT the actual bitrate.
The mega should talk fine to its own usb/serial port, because they should have consistently picked "which side" of 14400to be on, and other devices (most
other devices) should be OK if they're closer to correct.
And I can't think of a reason why a serial port couldn't talk to itself or another serial port on the same arduino (with the same bitrate generator decisions), EVER, even if the resulting bitrate were WAY off of what was expected (it should still be the same for receiver and transmitter.)