Yep, that worked. I found that the precise destination point (plus the y bias of the character I think) is actually in the path, but not the last point. So, if I call find path with the point (5, 0, 5), the second to last point is (5, 1.25, 5), but the last point is (5.06##, 1.25, 5.039##). I'm not sure why this is. In any case, the skew on the final point is small enough that an epsilon of 0.1 ignores it.
This is my implementation (reduced to the general form), if anyone is interested:
bool PathExists(World* world, Entity* entity, Vec3 destination, float epsilon = 0.1)
{
// Based on Josh's input and a quick test, this seems to work
if (path != NULL)
{
Vec2 pathBackXZ = path->points.back().xz();
Vec2 pointXZ = point.xz();
return (pathBackXZ.DistanceToPoint(pointXZ) < epsilon);
}
else return false;
}
Thanks Josh.