I had a similar issue where the 3PP cam would appear at the Actor origin. Turns out in my C++ I forgot to attach the 3PP cam to the SpringArmComponent socket:
// Create the arm on which the 3PP camera will sit
ThirdPersonCameraArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("ThirdPersonCameraArm"));
ThirdPersonCameraArmComponent->SetupAttachment(GetCapsuleComponent());
ThirdPersonCameraArmComponent->SetRelativeLocation(FVector(0.f, 0.f, BaseEyeHeight));
ThirdPersonCameraArmComponent->SetRelativeRotation(FRotator(-20.f, 0.f, 0.f));
ThirdPersonCameraArmComponent->bUsePawnControlRotation = false;
ThirdPersonCameraArmComponent->TargetArmLength = CamArmLengthMax;
// Create a CameraComponent for third person perspective
ThirdPersonCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("ThirdPersonCamera"));
ThirdPersonCameraComponent->SetupAttachment(ThirdPersonCameraArmComponent, USpringArmComponent::SocketName); // I forgot the SocketName here
ThirdPersonCameraComponent->SetActive(false);
which is necessary to get the arm length offset to be respected. After recompiling I found the issue wasn’t fixed, but I was able to fix it by deleting the instance of the relevant Actor from my map and recreating it; something something CDO I guess, since the code above is in the Actor’s constructor.