HI M/Ms 12223231,
May I call you 12 for short?

There are a lot of potential issues in the example you posted. I would be suprised if this code could run 45 minutes without errors. I will list some suggestions that you can work on, then you can re-post and let us look again.
1) The "Wait until next Millisecond..." function will not enusre your code looks at the serial port every 20 ms. It will ensure it never checks the number of bytes at the serial more often than every 20 ms. In a Windows environment, that means most of the time you will NOT find 4 bytes at the port but some other number.
That issue can be handled using a shift register to store the extra bytes or the sort messages and only updating your chart when you have a complete set. This would get around the issue of indeterminism in Windows.
2) 50 times a second you are going to be adding a point to your chart. At first this may be no big deal, but after you start collecting a pile of data, the chart updates are going to get in the way of your I/O.
Search this site for examples of "Producer/Consumer" design pattern. Your data acquisition loop (serial collection) would be the producer. The chart should be in the Consumer loop.
Ben