Assign Roles is more complex than it needs to be, because it always shows all roles that the current user is allowed to assign. For example if you do Assign Role for a course it shows 'Administrator' as an option, but that role isn't usually appropriate at course level. Similarly, it shows 'Student' at site level, where that role isn't usually appropriate.
There might be special cases where that kind of role assignment is useful but they are the exception not the rule. So I think it would be useful to have a 'Basic/Advanced' kind of set up for Assign Roles, where by default it shows only roles that usually apply at a given contextlevel, but if you click Advanced, you can assign others. Alternatively, maybe those special cases are so rare that it doesn't matter, and no Advanced mode is needed.
In order to configure this system, as part of defining a role, there would be a set of checkboxes for each contextlevel (site, category, course, module, etc). This would control entries in a database table such as mdl_role_contexts (role, contextlevel). That table could then be used to filter the display on the assign roles screen.
(Note that the OU may have time to implement this. If moodle hq would like us to, please let me know.)