If I send the data directly by USB to either arduino, they operate exactly as they should. The baud rate is 38400 if that somehow makes a difference - 9600 is too slow. As a test, I told the nove to repeat any data it received and it either does nothing at all or sends 1 random character. I can also use a separate USB FTDI adapter that works perfectly fine.
The reason I think there's something electrically wrong is because of the softwareserial glitch. I have no clue why it would just go berzerk like that in ways that code isn't involved.