Just wanted to give a heads up: Camera.WorldToViewportPoint seems to be returning incorrect results whenever you hold a mouse button when called from certain points in execution order, e.g. from LateUpdate on a script with execution position 0. This might be linked to the bizarre OSX issue you have already encountered and worked around of with Unity 5.4 (reported screen size going wrong whenever mouse is pressed). So far we have reproduced it on two Windows PCs with Unity 5.4.2f1. I'm not yet sure which Unity 5.4 versions beyond 5.4.2f1 it affects, haven't tested the latest patches yet.
The interesting detail about the issue is that only LateUpdate calls to Camera.WorldToViewportPoint seem to return incorrect coordinates - FixedUpdate and Update usually return proper ones (unless we're checking Update on late-executing scripts), even when the mouse is pressed. Might be worth going through NGUI code to check if there are any calls to Camera.WorldToViewportPoint from LateUpdate.