EDITED: Well, I finnally got what’s the problem: you’ve altered the GUI scale using GUI matrix, but nobody told it to Screen.width. In other words, Screen.width is still expressed in scale 1, while all GUI itens are using the scale you’ve defined. The solution is to convert the screen width to this scale:
// calculate scale
var scale: float = Screen.height / nativeVerticalResolution;
var newScreenW: float = Screen.width / scale; // adjust screen width...
var newScreenH: float = nativeVerticalResolution; // and height
GUI.matrix = Matrix4x4.TRS(Vector3(0,0,0),Quaternion.identity,Vector3(scale,scale,1));
// the rect will be calculated using the new screen width:
GUI.Label (Rect(newScreenW - W, 0, W, H), imageFile);
// the same thing, but at the bottom-left corner:
GUI.Label (Rect(0, newScreenH - H, W, H), imageFile);