I managed to catch this in the IDE. I have a therory...
The error occurs when the shots array is being redimensioned in CreateShot. This happens when the array is size N and there are already N shots in the sim and the N+1th shot needs to be created. CreateShot() gets called from several places including UpdateShots when say, a new energy shot needs to be created as a result of an impact with a -1 shot or from places like MakePoff() where Poff shots get created. I'm pretty sure the locking problem has to do with something VB is doing farther up the call call stack and what I just noticed is that the calls to CreateShot() from UpdateShots() are inside a With Shots(t) statement but the calls from MakePoff are not. This could explain the itermitent nature of the bug. If the N+1th shot gets created as a result of a Pof shot, no error. BUt if as a result of one of the calls from UpdateShots(), the error occurs.
Do people who encounter this frequently run without Poffs? That could explain the increased frequency for them.
I've changed UpdateShots() to no longer use the With statement (fix is in 2.42.8c and beyond). Time will tell if this makes a difference.