Making minor changes to your code, it would appear that the parts I actually need would be:
[pascal]
// calculate reflection
N := prim.GetNormalAt(pi);
R := VectorSub(ARay.Direction,VectorScale(N,2.0 * DotProduct(ARay.Direction,N)));
reflray.Origin := VectorAdd(pi,VectorScale(R,cEpsilon));
[/pascal]


That would suggest that I first need to know pi (and I'm guessing that isn't 3.1415). In this case, is pi the intersection of the point on the surface?

Lets go to a visual aid:


Given your above code I think that the following mapping is appropriate:
N - Normal of the intersection point of [V-1]->V to A->B
A.RayDirection - V - [V-1]
cEpsilon - Proper Scaled Epsilon (please tell me you arn't using static 0.0000001 in a ray tracer)

My response (using dts as Delta Time Step difference) [nV-dts]->nV would then be equal to reflray.Origin->R correct?