Actually, i do have 3 interrupts in this program. Maybe SEROUT is getting interrupted and thats messing with the data.

I'm gonna try disabling the interrupts while I run SEROUT... Not the best long term solution as It wouldnt be good to miss one of those interrupt events, but its worth a try to see if thats whats causing my problem.