For publishing web sites to a development server after it is build on my CI server in CruiseControl.NET, I use Microsoft Web Deploy. It requires that you install the deployment service on any servers that will be deployment targets. Then you can simply add an execute step to your build process that runs msdeploy.exe. Here is an example I use in NAnt:
<exec program="C:\Program Files\IIS\Microsoft Web Deploy V2\msdeploy.exe">
<arg value="-verb:sync"/>
<arg value="-source:dirPath="${tmpdir}""/>
<arg value="-dest:dirPath="${deploy.dir}",computerName=http://${servername}/msdeploymentservice/"/>
</exec>
By using Web Deploy, you can easily do a complete sync of the web site contents removing things that should not be there as well. It also has other options to do things like ignore certain directories and issue commands to recycle app pools, etc.