Bueno, después de contactar con el Soporte de Microsft lo conseguí funcionando correctamente, pero es lento y más o menos inútil. Hacer una copia de seguridad y luego una restauración es mucho más rápido y lo usaré siempre que la nueva copia viva en el mismo servidor que la original.
El código de trabajo es el siguiente:
ServerConnection conn = new ServerConnection("rune\\sql2008");
Server server = new Server(conn);
Database newdb = new Database(server, "new database");
newdb.Create();
Transfer transfer = new Transfer(server.Databases["source database"]);
transfer.CopyAllObjects = true;
transfer.CopyAllUsers = true;
transfer.Options.WithDependencies = true;
transfer.DestinationDatabase = newdb.Name;
transfer.DestinationServer = server.Name;
transfer.DestinationLoginSecure = true;
transfer.CopySchema = true;
transfer.CopyData = true;
transfer.Options.ContinueScriptingOnError = true;
transfer.TransferData();
El truco fue establecer la propiedad DestinationDatabase. Esto debe configurarse incluso si el destino es el mismo que el origen. Además, tuve que conectarme al servidor como una instancia con nombre en lugar de usar las otras opciones de conexión.