Mixpanel determines the location data based on the IP address of the incoming event. This data is parsed through a service called MaxMind to generate the Country, Region, and City values.
If you are sending data server-side, the geolocation will be set to the location of the server, overwriting the user's client location. To fix it, you can pass the user's real IP using the $ip property when you send the event.
If a user is connected to a VPN, the location will be based on the location of the VPN server that the user is connected to. This could potentially result in discrepancies between the actual location of the user and the location data displayed in Mixpanel.
Do either of these seem like they may be the case?