Solution:
When adding the new role with add_role()
you (or a plugin) defined “Role name” and “Display name for role” (http://codex.wordpress.org/Function_Reference/add_role).
current_user_can()
takes name, not display name, i.e. “case-sensitive, and should be all lowercase” (see http://codex.wordpress.org/Function_Reference/current_user_can)
In your case I’m guessing that would be
... && !current_user_can( 'super_user' ) ...
EDIT:
Only now did I see you are passing a role instead of capatibility to current_user_can()
. This will work (in WP 3.6 at least) but don’t do that.
From the docs (links above):
Do not pass a role name to current_user_can(), as this is not guaranteed to work correctly (see #22624). Instead, you may wish to try the check user role function put together by AppThemes.
I’d suggest that you use some capability that only admins and your superusers have, probably update_core
or something similar.