Acho que você está no caminho certo.
Is my belief that it is preferable not to rebuild for each environment reasonable?
Você está correto. Você deve construir uma vez e implantar os mesmos artefatos em cada ambiente, alterando apenas os dados de configuração.
Is this a suitable approach to achieve my objectives, or have I missed a different/better approach?
O que você descreveu (duas configurações de solução, promover uma compilação com a configuração de aplicativo relevante) é uma boa solução, na minha opinião.
If following this approach, is it considered preferable to leave the solution configurations in place (for the app.config transforms), just using debug/release for the build and then transforming as part of the release job? Or is it better to manage the configuration through the Release Definition environment variables (we do not have centralised configuration management)?
Acho que não há problema em deixar as configurações de depuração e lançamento no lugar. Você pode usar grupos de variáveis ou simplesmente armazenar os arquivos de configuração específicos do ambiente em um local seguro, puxando-os conforme necessário durante as liberações. Use o que for mais fácil para você manter.