Why is $b2 expanded using *?
$b2
*
There is ambiguity: $($x:ident)?+ today matches a?b?c and not a+. Fortunately this is easy to resolve: you just look one more token ahead and always treat ?* and ?+ to mean separate by the question mark token.
$($x:ident)?+
a?b?c
a+
?*
?+
$($x:tt){2,7}