2d sprites don't use the UIRoot's virtual pixels as it makes them by inversely scaling the resolution.
I'm actually not entirely sure how the 2d sprites determine their size, because you can set things like point size something directly on the sprite asset.
Essentially, you can't count on 2d sprite's size for anything. I think the missized UI2dSprite is because you have the game view in the background; then Unity gets confused about the size of the view and report a weird Screen.height which makes NGUI size it wrong.