What is the exact data sent from the SpO2 module? Is there any header that can be identified befor getting data?

I mean does the module send out "Hey! Data coming" and then the measurements each time?

If the measurements are sent out continusly without any header, then your PIC is reading at random times, confusing the data frames between them.

You have to find a way to just wait for the start of each frame and then grab the next data.

Ioannis