I just finished my first controls course (on linear control systems) and we learned about 3 types of controllers: PID, State Space, and Frequency Response/Loopshaping. From what I understand, PID has the advantages of being really easy and it can be applied without knowing the dynamics of the system. State space provides really good responses. But loopshaping seemed very guess and check when we were doing it and kind of arbitrary. In addition, we got to actually implement the first two on a multirotor for our labs and didn't have time to do the last beyond homework. So when would it be advantageous to use loopshaping?
When designing a controller the first priority should always be stability and then performance/robustness.
I do not know what method you used for tuning a PID controller, but I would suspect that it might not be easy to proof stability. Increasing performance would then probably involve increasing the gains. And it is probably hard to make a PID controller robust.
For state space controller design you can look at the closed loop dynamics (matrix) and check whether it is stable (Hurwitz for continues time and Schur for discrete time). For performance you can try to place the closed loop poles as far as possible into the left half plane. I haven't looked at it, but there will probably be methods for robustness in state space. For disturbance rejection you can find a state estimator using a Kalman filter (by solving a Riccati equation).
For loopshaping you can proof stability using a Nyquist plot using the Nyquist stability criterion. For performance you can just increase your bandwidth (sometimes defined at the point where the open loop crosses the 0 dB). Gain and phase margin can be used to see how stable/robust your closed loop system is. Closely related to this (but not often mentioned) is the modulus margin, which is basically the shortest distance to the minus one point in the Nyquist plot. This inversely relates to the highest peak of the sensitivity function of the closed loop system, which is a measure of the worst disturbance rejection. There are also other methods for robustness, such as H infinity.
So a PID controller might be the easiest, but it is much less advanced. The advantage of state space control is that it can also be applied to MIMO systems, which is harder to do for loopshaping. But the advantage of loopshaping is that you can just measure a frequency response function and design a controller for that directly, while for state space you first have to fit a model onto it first. Also if your system is continues, but also has delays it is harder to capture that into a state space model, but for loopshaping this does not change anything.