Para responder especificamente à pergunta:
What is the difference between the two?
Não há diferença. Eles são apenas diferentes aliases para o mesmo caminho. Como Mark mencionou, alguns programas usam %TMP% enquanto outros usam %TEMP% . O Windows atribui ambos ao mesmo caminho por padrão para garantir a consistência entre diferentes programas e até mesmo proteger contra erros do desenvolvedor, como usar os dois no mesmo programa.
Observe também que a variável %Path% não tem nada a ver com %TMP% ou %TEMP% . %Path% é uma variável do sistema, enquanto %TMP% e %TEMP% são variáveis do sistema e variáveis do usuário. As versões do sistema estão vinculadas a C:\windows\TEMP . AFAIK, apenas o usuário "System" pode realmente usar essas variáveis, como evidenciado por um teste simples; abra uma janela cmd e digite echo %TMP% ou echo %TEMP% e retorne o caminho definido na versão do usuário das variáveis. No entanto, como %Path% não possui uma versão de usuário (por padrão), você pode fazer echo %Path% e retornar o valor da variável de sistema.
Não tenho certeza absoluta de como os programas usam a variável de sistema "Path", que é provavelmente o que o cygwin estava se referindo, mas, independentemente disso, posso garantir que não tem nada a ver com TMP ou TEMP.
Espero que isso responda à sua pergunta.
EDIT: Acabei de lembrar o que é %Path% - ele permite que você acesse todos os arquivos que estão em qualquer um dos caminhos especificados na variável sem precisar usar o caminho completo para o arquivo. Por exemplo, adicionar "C: \ myprog \ bin" a% Path% permitirá que você simplesmente digite myprog ou myprog --help etc na linha de comando sem ter que digitar o caminho completo, como "C:\myprog\bin\myprog.exe" --help . É claro que o uso de linha de comando é apenas um exemplo, ele permite que qualquer programa ou interface acesse qualquer tipo de arquivo sem precisar do caminho completo.