Primeiro, olhe para o seu ambiente de desenvolvimento. Se você tiver problemas de depuração porque tem cinco variáveis em escopos diferentes com nomes idênticos, e o depurador não mostra qual dessas variáveis é a que você precisa, não use cinco variáveis com o mesmo nome. Existem duas maneiras de conseguir isso: Use uma variável ou use cinco nomes diferentes.
Seu depurador também pode dificultar a depuração de uma função com muitas variáveis. Se uma função com 20 variáveis é mais difícil de depurar do que uma com 16 variáveis, então você pode considerar a substituição de 5 variáveis por uma. ("Pode considerar" não é o mesmo que "deve sempre").
Não há problema em ter uma variável usada em vários lugares, desde que a variável sempre tenha o mesmo propósito. Por exemplo, se dez chamadas de função retornarem um código de erro, que é tratado imediatamente para cada chamada, use uma variável e não 10. Há um problema com isso: geralmente, o compilador informará quando você usar uma variável não inicializada. Mas aqui, se você ler o código de erro após a chamada 6, mas a variável não foi realmente alterada após a chamada 5, você obterá dados inúteis sem o compilador avisando você. Porque a variável foi inicializada, com dados que agora são inúteis.
Importante, nada é uma regra de ferro. Tudo tem vantagens e desvantagens. Se as "melhores práticas" sugerem uma coisa e você tem razões para dizer que é uma má ideia em sua situação específica, então não faça isso.