In the end, I did what Mitch started to suggest -- maintain a 1:1 relationship between solution/project configurations, publish profiles, and environments. The tooling works better if you give it everything it wants.
So, this should be a no-brainer
| Environment | Solution | Publish | Assembly |
| | Configuration | Profile | Configuration |
============================================================
| Test | Test | Test | Debug |
| Staging | Staging | Staging | Debug |
| Prod | Prod | Prod | Release |
And I can specify the assembly build configuration in the publish profile (so that the production environment gets release optimizations). And, the configuration/platform properties disappear from the command line.
cmd> msbuild my.sln /t:Build /p:DeployOnBuild=true;DeployTarget=Package;PublishProfile=Staging;VisualStudioVersion=11.0
And everything ends up in a neat package folder
.\websites\somewebsite\obj\Staging\Package