The important thing to remember about a PID control loop is that each term is intended to dominate control at different times during a move.
The proportional term is intended to dominate and provide a larger torque (or in your case speed) the further you are away from your target position.
The derivative term is intended to dominate during the 'cruise' phase of your typical trapezoidal move. It helps to reign back a very high proportional term and limit runaway acceleration when you are far from your destination, but it can also help increase the speed at which you converge on your destination when you get close to it and the proportional term contributes much less.
If you are using a velocity controller rather than a torque controller then the derivative term may actually be hidden inside your speed controller and not directly accessible to your PID loop. This can make control simpler (typically it will just accelerate as quickly as it can up to the desired speed or maximum speed, whichever is lower) but it can also make it less predictable. Often an overly aggressive D (or P) term can result in getting into a limit cycle (often incorrectly called resonance or oscillation due to the sound of the motors humming or even screaming in this state, though limit-cycle is a much more accurate description).
The integral term is there to correct for residual steady-state error, that is where there is a persistent, long term difference between where you are being asked to go and where you actually are. Your current
correction (really just tolerance) value works like the opposite of an integral term, it cuts the motor entirely when you are within a deadband around the desired position.
Due to these factors, you will gain little from implementing a full PID loop unless you also plan in a velocity profile with a distinct accelerate, cruise & decelerate phases.
Also bear in mind that the deadband and lack of I term will mean that the final position will always be somewhat random and will most likely differ depending on which direction you approach the desired position. As such, your bi-directional repeatability could be much worse than your standard repeatability.
For more information on the difference between accuracy, repeatability and resolution, see this excellent description. In your case, your resolution is your compass sensor, while both accuracy, repeatability are most likely limited by your
correction value, since if the
correction value is larger than your compass resolution, you are throwing away some of your positional accuracy in return for being able to turn off your motor when you are close.