First, about the OP's question: There is no definitive answer, because it hasn't been tested extensively.
Now, onto LAME's history:
The lame -q switches have had several evolutions during their history, including when they didn't exist and there was just -f and -h.
They are mostly related to CBR, because for VBR, the process of encoding is less dependant on how hard it tries to fit the data into the specified bitrate.
I won't enter much in detail, but the lame changelog has some information related to what was added to the different options.
Said that, it's important to understand this:
-f (and the -q 9 to -q 6 options) disable some of the analysis tools related to psychoacoustics and quantization. This means it calculates less information and as such, can make mistakes easier. The goal in this case is exclusively speed.
-h (and the -q 3 to -q 0 options) enable extra loops and analysis that allow to find the best compromise out of several options. The goal in this case, was to increase the quality for a determined bitrate. (CBR, remember?).
Now, onto the -q0 bug, the -q3 is the new -q2, and the -h is mapped to -q2 thing:
Several years ago, -q0 had a bug in its algorithm that could (i.e. not always) cause worse quality than -h (-q2 at that time). The bug was in the inner loop that tries to get the best quality by "brute force". Later on, this was fixed, but again it didn't receive much testing.
Later, a new "brute force" algorithm was created, and was activated with the -q 0 setting. This meant than then, all qualities were moved one position up. I.e. old -q2 became -q3, old -q0 became -q1 and so on (and yes.. old -q9 disappeared).
What didn't get changed was the quality to what -h was mapping, so this is why now -q 3 is the default (which used to be -h), and -h maintains the old mapping, that was -q 2.
It didn't help that nowadays, LAME is mostly tested for VBR, and as has been said already, the quality values work differently for VBR because they don't activate the same things.
Now, onto LAME's history:
The lame -q switches have had several evolutions during their history, including when they didn't exist and there was just -f and -h.
They are mostly related to CBR, because for VBR, the process of encoding is less dependant on how hard it tries to fit the data into the specified bitrate.
I won't enter much in detail, but the lame changelog has some information related to what was added to the different options.
Said that, it's important to understand this:
-f (and the -q 9 to -q 6 options) disable some of the analysis tools related to psychoacoustics and quantization. This means it calculates less information and as such, can make mistakes easier. The goal in this case is exclusively speed.
-h (and the -q 3 to -q 0 options) enable extra loops and analysis that allow to find the best compromise out of several options. The goal in this case, was to increase the quality for a determined bitrate. (CBR, remember?).
Now, onto the -q0 bug, the -q3 is the new -q2, and the -h is mapped to -q2 thing:
Several years ago, -q0 had a bug in its algorithm that could (i.e. not always) cause worse quality than -h (-q2 at that time). The bug was in the inner loop that tries to get the best quality by "brute force". Later on, this was fixed, but again it didn't receive much testing.
Later, a new "brute force" algorithm was created, and was activated with the -q 0 setting. This meant than then, all qualities were moved one position up. I.e. old -q2 became -q3, old -q0 became -q1 and so on (and yes.. old -q9 disappeared).
What didn't get changed was the quality to what -h was mapping, so this is why now -q 3 is the default (which used to be -h), and -h maintains the old mapping, that was -q 2.
It didn't help that nowadays, LAME is mostly tested for VBR, and as has been said already, the quality values work differently for VBR because they don't activate the same things.