A long comment:
Automatic renaming again:
ClearAll[F];
F[x_] := Hold[With[{a = x}, {b = x}, a]];
F[0]
Hold[With[{a$ = 0}, {b = 0}, a]]
but in a quite strange manner...
It is strange, because I was expecting it already in DownValues, but this is not the case.
DownValues @ F
{HoldPattern[F[x_]] :> Hold[With[{a = x}, {b = x}, a]]}
So who does it? :) Here is a pure guess, if evaluation is really a replacement then I would blame RuleDelayed:
Hold[F[0]] /. Echo @ DownValues[F]
{HoldPattern[F[x_]]:>Hold[With[{a=x},{b=x},a]]}
Hold[Hold[With[{a$ = 0}, {b = 0}, a]]]
But let's get back to facts. It appears that (in this case, see bottom of the section) automatic renaming is renaming symbols in arguments from the first one to the last position where potential collisions take place (and this is a problem). Moreover, it is triggered if the problematic symbol (x) appears in the second argument or later.
Here up to the second one but a wasn't there to notice, let's change b = x a:
ClearAll[F];
F[x_] := Hold[With[{a = x}, {b = x a}, a]];
F[0]
Hold[With[{a$ = 0}, {b = 0 a$}, a]]
and if you use x "later", in the third argument, my claim will be held:
ClearAll[F];
F[x_] := Hold[With[{a = x}, {b = x a}, a x]];
F[0]
Hold[With[{a$ = 0}, {b$ = 0 a$}, a$ 0]]
On the other hand this rule seems to apply only to a specific situation where we have a list of assignments:
ClearAll[F1, F2];
F1[x_] := Hold[With[{a = x}, {b = a x} , a]];
F2[x_] := Hold[With[{a = x}, b = a x , a]];
F1[0]
F2[0]
Hold[With[{a$ = 0}, {b = a$ 0}, a]]
Hold[With[{a$ = 0}, b = a$ 0, a$]] (*!!*)
It will happen for a documented syntax too:
ClearAll[F];
F[x_] := Hold[With[{a = x}, a x ]];
F[0]
Hold[With[{a$ = 0}, a$ 0]]
but here we will never face a situation that a scoped symbol (a) appears in an argument subsequent to the minimal position, of x, which triggers renaming.
(*please help with wording ;P *)
Ergo, the new With is not ready for automatic renaming, worth to report.