Using the webgl renderer it seems like selection highlight sits a bit lower than the canvas renderer.
Webgl:

canvas:

Here's an example where it looks like the characters drop when the cursor highlights them. Feels like the cursor needs to be moved up a few pixels.

This could perhaps be an issue with the font. Currently im using Fira Code and when using courier-new, courier, monospace the first issue doesn't happen but the second example does still happen.
Oh the cursor not the selection. This is because of my new favorite Chromium bug https://bugs.chromium.org/p/chromium/issues/detail?id=1026254, https://github.com/microsoft/vscode/issues/84432
The reason it's different inside just the webgl renderer if because the exact same canvas is being used to render the cursor for both webgl and canvas, it's just another transparent canvas sitting on top of the webgl canvas. Same for links:
I'll leave this open as maybe I can look into not using textBaseline middle.
Created https://github.com/xtermjs/xterm.js/issues/2614 to remove cursor canvas