Also with the current raycasting and it returning zero. This is an absolute zero that is highly unlikely to be that matched on a floating point range while raycasting.. e.g. 0.0001 still will not match to absolute zero 0.0000, this way you can do straight raycast to model level or choose a base depth if it equals absolute zero. So if you can do the click and drag of the gui icon and then use normal raycasting, i cant see why you couldnt place asset directly where needed.
With the screen to worldpos, there are 2 types. Screen to world space camera coords .e.g. make a character look at the cursor on screen. Or you can make the character look at a world space ray point based on cursor screen pos... e.g. one looks at camera cursor, the other looks away from camera and at a raycasted surface.

