I have run into the same issue when dealing with a large number of points. Filtering using GeoWithinQ is slow because it hits Wolfram's servers and will also fail for a large number of points. Filtering using GeoGridRange is also very slow. Outline of a workaround that I use.
geoPositions = RandomGeoPosition[Entity["Country", "UnitedStates"], 1000];
positions = geoPositions /. GeoPosition[p_] -> p; (* Extract coordinates *)
bounds = CoordinateBounds[positions]; (* Bounding box *)
(* Divide bounding box *)
lats = FindDivisions[First@bounds, 6];
longs = FindDivisions[Last@bounds, 6];
(* Subdivided bounding boxes *)
grid = Table[{i, j}, {i, lats}, {j, longs}];
(* Rectangle for one subdivision *)
section = Rectangle[{35, -110}, {40, -100}];
(* Select positions in the rectangle *)
selected = GeoPosition@Select[positions, RegionMember[section, #] &]
GeoListPlot[selected,
GeoBackground -> GeoStyling["SatelliteWithLabels"], GeoServer -> "DigitalGlobe"]
