From my experience, if you want to have a consistent data transfer over the softserial, you must disable (in Arduino) the globelglobal interrupts for the time of transmission. To disable global interrupts use cli() command, to enable it again use sei() command.