刺さったときにデバッガで止めてみろとしか言えんぞ。
FOVCheckの判定と、
    if( vecScr.x <= 0 ) vecScr.x = 0;
    if( vecScr.y <= 0 ) vecScr.y = 0;
    if( vecScr.x >= Viewport.Width ) vecScr.x = Viewport.Width;
    if( vecScr.y >= Viewport.Height) vecScr.y = Viewport.Height;
の辺りが矛盾した結果を返しそうな気がするが。
…長方形では正しくても、台形では間違ってそうな感じ。