Because the overload for any values is for an array of const. Dynamic arrays are not compatible to array of const while a dynamic String array can be passed to array of String parameter (which is not a dynamic array, but an open array).
Out of Curiosity:
Is this because in a nutshell an "array of const" is an array of literals? like [1,5,18],
as in: we're throwing literal values on the stack, and not a memory-address to a variable
(and yes, i've looked at the Source-code for the overloaded "Join", where you check the Type to use the correct "transformation" to String)