I think I figured out the math for it but I'm getting weird results so I'm not sure where I'm messing up.
I have my quad and my camera attached to the same rotating pivot, which means I just need to get the Z value of where the quad should be based on the Z value of my camera. If the center of the sphere and the position of my camera are treated as antipodal points on another sphere, then where those two spheres intersect should be the tangent.

Since I'm only interested in the Z value and my sphere is at 0,0, I can use these equations:
https://mathworld.wolfram.com/Sphere-SphereIntersection.html
i.e. x=(d2-r2+R2)/(2d). (except that x is z for my purposes)
Because my r and d are equivalent, this reduces down further to just R2/2d
so all my code boils down to is:
var r:float = %Camera3D.position.z * .5
var R := .5 #sphere radius
z = (R * R) / (r + r)
which is so simple that it worries me. And like I said, I'm getting weird results, but that could also be due to bad math after handling the mouse events on the quad. Does my math for the quad placement seem correct though?