Why does the GeoGraphics Frame show different Latitude than GeoPosition?

This is not a bug. When dealing with a map there are two different coordinate systems you need to handle, related by the cartographic projection you are using.

First you have the {lat, lon} coordinates on the surface of the Earth's ellipsoidal model. These are the numbers in GeoPosition[{lat, lon}].

Then you have the coordinate {x, y} on the flat map of the Earth. These are the numbers in GeoGridPosition[{x, y}, projection]. The projection specifies the function that converts from {lat, lon} to {x, y} or viceversa. When you do GeoGridPosition[GeoPosition[{lat, lon}], projection] you get GeoGridPosition[{x, y}, projection]. If you wrap the latter with GeoPosition, you get GeoPosition[{lat, lon}] back. The "Equirectangular" projection is basically defined as x = lon, y = lat. But other projections (say "Mercator") have nontrivial formulas.

The map needs to use the map coordinates, that is {x, y}, and that is way your "Mercator" map does not agree with the expected {lat, lon} coordinates.


To long for a comment:

It seems that Geo-FrameTicks are not handled well unless we use "Equirectangular" GeoProjection. Even if it is a cylindrical projection, as a "Mercator" used here, the result's ticks seem to be rescaled badly.

I can't find anything about that in documentation so I'm encouraging you to report that to WRI Support.

Meanwhile use "Equirectangular" projection if you need ticks:

GeoGraphics[ GeoPosition @ {42.31, -71.19}, 
  GeoGridLines  -> Automatic, 
  Frame         -> True, 
  GeoProjection -> "Equirectangular",
  GeoRange      -> Quantity[10, "Miles"]
]

enter image description here

If you need different projections you can create custom FrameTicks (notice that GeogridLines are correct anyway) like I did in: GeoProjection for astronomical data - wrong ticks

enter image description here