To answer your question:
Can SQL Compare take the contents of an entire database (schema, data, users, etc..), and generate scripts that can be applied to an empty SQL 2008 database?
The simple answer to your question is yes, but you need to use SQL Compare and SQL Data Compare to achieve your goal.
Using SQL Compare, you will be able to compare the SQL 2008 R2 database with an empty SQL 2008 and deploy to the empty database so that they become identical with regards to the database objects or schema.
Next using SQL Data Compare, you will be able to compare the data between the 2008 R2 database to the 2008 database (that has no rows of data) and deploy the data to the SQL 2008 database.
The only thing to be aware off, if the SQL 2008 R2 database is using features that are not available in the SQL 2008, these cannot be deployed to the SQL 2008 database.
I hope the above answers your question.