What techniques do people use when protecting data (e.g., preventing a user downloading the whole dataset) they are overlaying on top of Google/Yahoo/Bing etc.?
You can restrict number of request/retrived features/etc per second/hour per ip. Annother approch would be converting it to harldy readable format (i.e. custom projection) or rasterizing vector data (as Google/MS does). You may also try to encrypt it, but I think, as cipy said, the best way is not to show it ;)
Keep the source off the Internet. Implement a proxy webpage and check the parameters/urls. Only allow certain parameters etc, if they don't match the proper ones reject. This could allow you to limit usage by IPs etc..
If your users login. You can add token handling.
For Google Maps or any Web Accessible Mapping platform is a good idea to hold your data on your own server and use php (or asp - et al) to control whom has access. This a good method for doing this in Google Maps API - using a MySQL Database and PHP http://code.google.com/apis/maps/articles/phpsqlsearch.html#outputxml
*First, you should put your database connection information in a separate file. This is generally a good idea whenever you're using PHP to access a database, as it keeps your confidential information in a file that you won't be tempted to share. In the Maps API forum, we've occasionally had people accidentally publish their database connection information when they were just trying to debug their XML-outputting code. The file should look like this, but with your own database information filled in. phpsqlsearch_dbinfo.php*:
I use this route with data held in postgres - only admin has control. Some other methods can be used (ip restrictions etc)
It is very difficult to restrict a Users to reproduce the layers (i am assuming you are talking about GIS data). That is why I will suggest you protect data using Cryptography or Digital Watermarking.
For more info see How can we protect GIS data?