Agrupe cada uma das suas variáveis de cor em colchetes com escape:
\[${COL_USR}\]
ou
COL_USR="\[${COL_Y}${COL_BRIGHT}\]"
Isso diz ao Bash que estes devem ser considerados de largura zero.
Isso é exatamente como descrito na pergunta à qual você se vinculou. Se você fizer o seguinte comando, verá que sua variável contém sequências de caracteres semelhantes às sequências "feitas à mão". O uso de tput
apenas torna as coisas portáveis para vários $TERM
types, mas não afeta o tamanho das sequências de código. É esse comprimento que está jogando fora as coisas.
echo ${COL_USR} | hexdump -c