The first and most obvious thing that I see is the two timer tick event handlers:
Inside those timer handlers you need to stop the timer each time the timer code is running. If you don't, then the timer event handler can be entered again on another thread and your data can get all out of sync, which is probably why you're experiencing missing reads and/or writes.
At the top of the code (in each timer event handler) as soon you enter the handler you want to
private void timer1_Tick(object sender, EventArgs e)
This will probably fix your code. But there may be other problems. This is just the one thing that I noticed immediately that must be changed to get it to work.