I figured this out. The key piece of knowledge for me was that the panner does not output a value between 0 and 1 - it outputs a value that grows with time. Frac was the solution - I just take the decimal portion from the panner to give me a UV between 0 and 1, feed that into my cropping logic before passing those UVs along to the texture.