Aggregation error with geohash_grid precision?

I'm experiencing what seems to be an error with the precision system in ES, which you can see in effect here:

My index contains 1,000,000 randomly generated documents, each containing 1 randomly generated geo coordinate somewhere within the UK.

I've got a javascript map onto which I'm plotting these coordinates, filtering the query with a geo_bounding_box of the current zoom level of the map.

What I'm seeing is a clustering of markers towards the top right of the bounding box. If I change the precision (as you see I do in the top left of the video) the effects seem to be exaggerated, but they're always visible at all but the lowest precision values.

Once I've zoomed to the highest level (where there are no more points to add to the map) things seem to stabilise.

I've debugged as much as I can and the raw data returned from elasticsearch seems to be the source: It's the points returned by ES which are all within the area demonstrated.

Is this something I've done? A misconfiguration or mis-mapping perhaps?

My query, for reference:

body: {
    'query': {
        'match_all': {},
    },
    'size': 0,
    'aggs': {
        'zoom': {
            'filter': {
                'geo_bounding_box': {
                    'metadata.geoFeatures.features.geometry.coordinates': {
                        'top_left': {
                            'lat': bounds.getNorthWest().wrap().lat,
                            'lon': bounds.getNorthWest().wrap().lng
                        },
                        'bottom_right': {
                            'lat': bounds.getSouthEast().wrap().lat,
                            'lon': bounds.getSouthEast().wrap().lng
                        }
                    },
                    'ignore_malformed': true
                }
            },
            'aggs': {
                'cells': {
                    'geohash_grid': {
                        'field': 'metadata.geoFeatures.features.geometry.coordinates',
                        'precision': vm.precision,
                        'size': '100'
                    },
                    'aggs': {
                        'center_lat': {
                            'avg': {
                                'script': "doc['metadata.geoFeatures.features.geometry.coordinates'].lat"
                            }
                        },
                        'center_lon': {
                            'avg': {
                                'script': "doc['metadata.geoFeatures.features.geometry.coordinates'].lon"
                            }
                        }
                    }
                }
            }
        }
    }
}