Tween skips over the beginning at high velocity

I have a system where, when a client fires their weapon, an invisible brick with a trail is tweened from the position of their gun’s barrel to its destination. The tween’s duration is properly calculated so that the cosmetic projectiles always have the same velocity. However, at high velocities, the bullet begins a distance in front of the barrel instead of inside it, where it’s designated to start. It’s not an issue with the way the trail renders; the invisible part also begins in front of the intended projectile origin. Changing the tween’s duration to a constant does not solve the issue, either. Here’s the code:

local bullet = ReplicatedStorage.Effects.Projectiles.BulletGeneric:Clone()
bullet.Position = camera.Viewmodel.Uzi.ProjectileOrigin.Position
bullet.Parent = workspace.Temp
local goal = pOrigin + pDirection
local tween = m.TS:Create(bullet, TweenInfo.new((bullet.Position - goal).Magnitude / Bullet_Velocity), {Position = goal})
tween.Completed:Connect(function() bullet:Destroy() end)
tween:Play()

…where Bullet_Velocity is above 100, pOrigin is the CurrentCamera’s Position, and pDirection is just the camera’s LookVector * 500.

The higher the velocity of the part, the farther away from the barrel it begins. I have no idea why. I’ve messed with the trail’s properties, changed “ProjectileOrigin” from an attachment to a welded part, anchored the bullet, all to no avail.