I also want to point out that I built the same setup shown in your example and it only positions the widget correctly if the Viewport is 1920x1080.
Here is my blueprint: My image is 100x100
I would also like to add that before, I had the widget not have a canvas panel as the root but instead used SetPositionInViewport with the result of worldPositionToScreen. This worked with all resolutions, but it would break if the rendering resolution did not match the size of the window.