I've written lots of rollback scripts as part of deployments to deal with this, but (furious knocking on wood) I've never actually had to use one.
There isn't going to be a magic bullet. You are going to have to identify each schema change and figure out how to map the new data to the old. Hopefully you can just get away with throwing away new columns, but when you get into more complex relationships it can get VERY messy.
Best case, you have a source control of the SQL scripts that were deployed. Otherwise you are going to have to use redgate or equivalent against a backup.