1) Check your mash thermometer in both ice water at 32 F and boiling water which is likely not exactly 212 F but check to see what it is at your elevation above sea level. Your mash temperatures are partway in between so taking the average deviation will be approximately correct. I know for my mash thermometer it is low by about 2 degrees on one end, but high by about 2 degrees on the other end, which means on average it reads pretty much perfectly at mash temperatures. Many people will not be so lucky and have to add or subtract a couple degrees at mash temp. If you are mashing a few degrees cooler than you thought, then beta amylase will have more time to act before it is denatured, resulting in lower FG than expected.
2) Check also that your hydrometer reads exactly 1.000 in plain cool water. Mine is often off by a couple of points. If it reads 0.998 for example then you need to add 2 points to all readings to get accurate results.
3) Yeast matters a lot. If you are using US-05, its average attenuation is like 83-84% or thereabouts. If you believe you are using "Chico" or "Cal Ale", realize that none of the "Chicos" are actually equivalent but have diverged quite a bit, and most of them attenuate only in the 70s percentage-wise, not 84%. And this is just one example. If you don't want low FG or high ABV, then consider switching to a lower attenuating yeast.
Those are just the first few ideas from my brain. NOT generated from AI but when AI eventually gets smart enough it will hopefully start saying the same stuff.
P.S. OP said he is brewing all grain. Just because he uses DME to make yeast starters, don't assume he is an extract brewer!