See https://crisal.io/words/2020/06/13/rounding-borders.html
At least the rounding up to device pixels happens consistently at computed value time:
Shipping Gecko and WebKit (my post was wrong, Blink and WebKit diverge, will fix) also floor to dev pixels at computed value time. Blink floors at rendering time, which I think is more unfortunate.