As I mentioned in an earlier post, the SqlRoleProvider is not really designed to work when the SqlMembershipProvider points to a different application. You would want to do such a thing if you were creating a suite of application sites for which you wanted a single user list but wanted each application to control its roles and role membership. The SqlRoleProvider and SqlMembershipProvider, worse that not providing this functionality, make you think it is provided by having an applicationName attribute on each one's configuration section. Alas, regardless of what you enter for the SqlMembershipProvider's applicationName, the RoleProvider's applicationName will always trump.
The solution I devised was to create a custom membership provider that derives from SqlMembershipProvider. I then overwrote the following methods:AddUsersToRoles, FinUsersInRole, GetRolesForuser, GetUsersInRole, IsUserInRole and RemoveUsersFromRoles. In addition, I copied the application stored procedures into renamed ones called aspnet_Custom_UsersInRoles_X where I allowed for both the UserApplicationName and the RoleApplicationName to be passed.
The big advantage of going this route is that it makes it easier to combine the ActiveDirectoryMembershipProvider with the SqlRoleProvider in that you are inheritantly allowing for the two to come from different sources.