The only 'legitimate' reason I can think of why you would see any sizable issue with location is if your phone is only registering 3 or fewer satellites, in which case it wouldn't be able to detect altitude. My understanding (which could be faulty) is that in that case, most systems normally just use the last recorded altitude, which might cause considerable area if, for example, you were traveling in an area with a large change in altitude. But 2 miles off is a lot, so I doubt that's the case here.
Both posts above should be helpful in localizing the error. If you're looking for another GPS app against which to test your Maps, to see if it's that app that's the problem, I highly recommend
Waze. I personally prefer it over Maps, as it tends to add a bit more 'valuable' crowd-sourced data like info on road closures, speedtraps & red light cameras, along with faster and proactive alternate route selection.
It's worth noting that Waze is a bit more of a resource hog (uses more data, battery, and memory), but if those aren't big concerns (and hey, that's what car chargers are for!) I find it offers a better overall experience. That said, Google acquired Waze about 1 1/2 years ago, and they've slowly been adopting some of the Waze features (most importantly they've been importing traffic reports from Waze users).