Não sei bem qual parte é sua dúvida, mas algumas coisas desse trecho de código só fazem sentido vendo o todo.
A variável var indiceCorAtual = 0 é usada pra indicar qual posição na lista feita em var cores = ['blue', 'red', 'green'] deverá ser retornada.
Quando é realizada a função desenhaCirculo a cor é definida por qual está endereçada naquela lista em pincel.fillStyle = cores[indiceCorAtual]. Como indiceCorAtual é 0, vai puxar 'blue'.
Para conseguir mudar as cores é usada essa função que você mandou o código, e ela vai ser executada quando o botão direito do mouse for clicado dentro dos limites do canvas com tela.oncontextmenu = mudaCor, aí é usado o return false para não abrir o menu normalmente abre com o click do botão direito.
Quando clica com o botão direito, a função mudaCor() é executada, indiceCorAtual era 0 passa a ser 1, agora vai endereçar cores[1] na função desenhaCirculo. Porém temos que fazer o indiceCorAtual voltar a 0 depois que ele endereçar a última cor da lista, pra isso o cores.length define qual é o tamanho da lista no if, que quando o indiceCorAtual ultrapassa esse limite, retorna a 0 e ficará nesse ciclo.
O uso de cores.length é importante para generalizar o código, assim você pode adicionar mais cores à lista sem ter que ficar mudando o número na condicional do if dentro da função mudaCor().