I think its because rotation is being done over time due to rotationSpeed but the rotation is coming from the theta between aiming directions, and doesn’t consider current rotation.
When you aim around I think the most you rotate is by delta * rotationSpeed and then, unless you keep wiggling the aim, you just get ~0 theta afterwards.
Edit: How to fix it depends on how you want it to feel. If you stop aiming and you haven’t finished rotating, should it finish rotating or should it stop?
If you want it to stop rotating when you stop aiming, I think you can just change theta to come from the difference between current rotation and newAimDirection.
If you want it to always rotate to where you last aimed then you separate rotation from aiming and have a simple “if current angle not aligned with aim direction, rotate towards aim direction.”
Right now rotation happens when aim input is not zero. So separate the function into two parts (or two funcs).
Check player input for aim dir. If it’s not zero, update our current aim direction.
You have current rotation in radians, something like aimdir.angle() should work to give desired radians, theta is from those two. Then you limit it like before, rotating with max speed or the remaining distance, whatever is smaller.