I've set the precision threshold to 6000 or higher, without any change.
The precision threshold doesn't mark the boundary between accurate and inaccurate - just use of counting technique 1 versus counting technique 2. Counting technique 1 is less susceptible to inaccuracies but is still not guaranteed to be fully accurate. That said, it is based on collecting hashes of values which can occasionally collide so I'd have expected an under-count rather than an over-count. One possible explanation is that a value may be held in different field types across indices, in which case string 1234
!= integer 1234
when merging results from the different indices.