This multiple-vars-at-same-scope thing happens also happens in the case
that the nameref points to a variable at a higher scope of the same name as
the nameref. I suspect this is related to the nameref resolution issue here
http://lists.gnu.org/archive/html/bug-bash/2016-05/msg00115.html
Given a function:
f() { local -n a=$1; a=X; }
The following works as expected:
$ a=(0); f 'a'
$ while [[ -v a ]]; do declare -p a; unset a; donedeclare -a a=([0]="X")
But the following does something strange:
$ a=(0); f 'a[0]'
$ while [[ -v a ]]; do declare -p a; unset a; donedeclare -a
a=([0]="X")declare -a a=([0]="0")