Well, I solved my own problem. For anyone curious, the key was using the stored pcx, pcz and tangentu attributes. A little attribute point wrangle did the trick:
float angleT = -$PI/2 + atan(v@tangentu.x,v@tangentu.z);
vector pivot = set(@pcx,@P.y,@pcz);
float dist = distance(@P,pivot);
float r = atan(@P.x-pivot.x,@P.z-pivot.z);
@P.x = pivot.x + dist*sin(r+angleT);
@P.z = pivot.z + dist*cos(r+angleT);