well i would have to do some tests as i have not run into this problem before. The time i did use GetScreenXFrom3D( x, y, z ) and that GetScreenYFrom3D( x, y, z ) it worked as my camera was an overhead view. It simply reported values that were off screen if they were not visible.
best solution i can think of is to point the camera at the object and then back to where its suppose to be and measure the angle difference. If its within ~90 deg + or - and your getscreeny,x from 3d reports actual values inside your virtual screen size then its probably on the screen. now thats not going to work if its on the screen but hiding behind an object.
I would do a raycast bounce possibly.
if i get a chance tomorrow i will do some tests for ya to see what method is best.