Seria mais correto se seus resultados dissessem o que o teste correspondente testou, por exemplo
if (( COUNTER%3 == 0 )); then
echo 'COUNTER is a multiple of 3'
fi
Este é o teste que você tem, e se você pensar sobre isso, 6, 9, 12 e 15 também são múltiplos de 3.
Neste script curto, sugiro que você teste diretamente em COUNTER
em vez de em COUNTER%somevalue
se quiser verificar o valor real do contador em vez de ser um múltiplo de algum valor:
if (( COUNTER == 3 )); then
echo 'COUNTER is 3'
fi
Observe que $
não é necessário em variáveis quando elas são usadas em um contexto aritmético.