This function USplineComponent::SetWorldLocationAtSplinePoint is intended to receive a World Location as input. It stores the location internally without first transforming it to local space. The object stores these locations as local space only.
The fix is to change the function to:
void USplineComponent::SetWorldLocationAtSplinePoint(int32 PointIndex, const FVector& InLocation)
{
if((PointIndex >= 0) && (PointIndex < SplineInfo.Points.Num()))
{
SplineInfo.Points[ PointIndex ].OutVal = ComponentToWorld.InverseTransformPosition( InLocation );
UpdateSpline();
}
}