Como @steeldriver me apontou, quando eu canalizo eu crio um subshell e os valores var não são passados para o var externo.
Como este link fornece
A solução seria algo assim:
while [ 1 ]
do
COUNTER=0
while read pap
do
ret='cat $pap'
if [ "a$ret" == "aTimeout" ]
then
echo "do something"
else
arr[$COUNTER]=$pap
COUNTER=$(( COUNTER + 1 ))
fi
sleep 0.3
echo $COUNTER
done < <( ls /tmp/paping* | grep -v pid)
echo $COUNTER
done
Agora meu contador está funcionando como esperado!