Você tem que envolver cada código de cor em colchetes com escape como este: \[colorcode\]
.
Exemplo:
STARTFGCOLOR='\[\e[0;36m\]'
STARTBGCOLOR="\[\e[0;32m\]"
ENDCOLOR="\[\e[0m\]"
Explicação: o bash precisa calcular o tamanho do prompt para que ele possa posicionar o cursor corretamente quando você pressionar home. Por alguma razão, o bash não considera os códigos de cores como não ocupando espaço na tela. Você tem que explicitamente dizer bash que os códigos de cores não ocupam espaço por wraping-los em colchetes de escape.
Veja aqui para mais explicações.