I chucked in a timer to see the difference between using the "readline" and a loop for readbyte(), turns out the time it takes for both to get the exact same frame is pretty much identical, but ill leave the read byte function in to see if that fixes the problem.
I put in a quick tester background worker to continuously spam frames over the com port. Frames are being sent with 3ms intervals and program seems to be keeping up so car communication speed shouldnt be an issue

Also had it sending through a "correct" response randomly when I send through a frame, seems to be picking it up flawlessly now with all the other data. Im thinking that the buffer was full as stated by you guys, buffer is now emptied every time a frame is sent.
Will do a proper log tomorrow and post up the result.
Cheers.