I know exactly what and where this bug is. I still don't know for sure how to fix it. I've tried a few things, obviously haven't nailed it yet.
It occurs when the size of the Shots array is increased using the VB "Redim Preserve" directive which re-dimensions the array while preserving the values. It's hard to reporduce because a) Shots arn't saved in sim files and is is highly timing dependent.
What little I have been able to find on the web about this error seems to indicate that if an element of the array is on the stack, then it MAY be locked, so I'm currently modifying any routine which passes an element of the Shots array to a routine that can grow it to use a temp var instead... Sigh.