Looks like it's a flawed stat, with almost all the bottom teams with more expected points and almost all the top teams with less expected points.
It seems not to correctly calculate / emphasize match situations, which leads to points (wins/draws).
The xPts is basically just a calculation on a game by game basis of what the final xG difference gives as win odds.
So a team that gets 2 xG in a game versus 1 xGA may be expected to win 70%, draw 25%, lose 5% (made up numbers) so they'd earn 2.35 xPTS and the opposition would earn 0.4. In general that's not a bad approach, but as you mentioned it totally ignores the game flow and how those xG numbers happened.
The United/City game is a very egregious example. City finished with 3.01 xG compared to United's 1.71 That makes it seem like a game where City had an advantage, but it was potentially close and United had chances to draw or maybe thief a win. Instead for anyone who watched it, and for anyone looking at the minute by minute xG chart, the xG was 2.98 to 0.14 when the game was 6-1 in the 80th minute. Then Martial popped in a couple sitters in the last 10 minutes after City basically stopped playing so suddenly United finished at 1.71 xG.
The xPts for that game are 2.24 - 0.57 which is hilarious as it gives United 0.57 more xPts than they deserved.
That's also a reason why it's not surprising for lower teams to have higher xPts. It's not uncommon for a losing team to be pushing for a late consolation goal while down by a couple and the other team has generally stopped going 100% and thus artificially inflating their xG. Basically xG or xPts aren't really adjusted for score effects, which has a significant impact on mock tables.