...the lack of an error is concerning me.
The lack of an error makes me think that the database doesn't think there is an error.
Which makes me think that in these cases you are sending an empty data set to insert.
I'm assuming the program deletes the data already in the table and then inserts all the current data (from the program's internal representation).
If so, what could cause this particular data set (ground units) to be cleared? (Or other data sets, if others sometimes disappear in this manner.)
Inadvertently re-initializing the collection?
Loop iteration off by one?
...the only consistent factor seems to be saves after leaving the game open a long time.
Does that include long-running, active play sessions, or do you mean just a long span of idle time?
I frequently have sessions that span multiple days, with (obviously) lots of very long idle time (10+ hours), and I have not encountered this error.
(That said, I also haven't done any GU stuff in C#, other than making militia to keep commanders busy, and a geo survey deployment.)