OK this is not a GeoPoint issue ... it's a problem with how the readers are wrapped in LuceneTestCase.wrapReader.
I isolated to the attached test case.
It happens when we first wrap the reader in AssertLeafReader, and then in SlowCompositeReaderWrapper.
The issue is that SlowCompositeReaderWrapper calls MultiFields.getBits to get the live docs up front in the ctor, which returns an AssertingBits, and then this AssertingBits is easily shared across threads.
I'm not sure how to fix it ... I suppose we could "fix" SlowCompositeReaderWrapper to not cache its Bits like that, but that seems overly cruel: it seems like AssertingBits is overstepping its purpose somehow. It should only be used to wrap a getLiveDocs returned e.g. to a search thread ...