The GCC docs explain it this way:
Macro arguments are completely macro-expanded before they are
substituted into a macro body, unless they are stringified or pasted
with other tokens.
(emphasis added)
The operands of the ## (token pasting) operator, on the other hand, are not macro-expanded before being pasted together. So, given
CONCATENATE(a,CONCATENATE(b,c))
the preprocessor does not expand CONCATENATE(b,c)
before expanding the outer macro's body because it is an operand of ##. The preprocessor instead performs token pasting before rescanning for more macros to expand, so
a ## CONCATENATE(b,c)
becomes
aCONCATENATE(b,c)
before the rescan, and there is no macro aCONCATENATE (but if there were, then it would be expanded).
On the other hand, with
CONCATENATE2(a,CONCATENATE2(b,c)),
the argument CONCATENATE2(b,c)
is not an operand of the ## (or #) operator, so it is expanded before being substituted into the macro body, ultimately yielding
CONCATENATE(a, bc)
as the first expansion of the outer macro. That is rescanned for further expansions, yielding
abc