You don't have to check for notify, ignore, user levels, etc, $cnick() does that for you

($cnick() won't return the colour for an entry in the color list unless it matches all of the criteria)
The following will work fine:
alias iscolour {
if ($cnick($1)) { return $cnick($1).color }
elseif ($regex($left($nick($2,$1).pnick,1),/([.~!*&@%+])/)) {
if ($cnick($regml(1))) { return $cnick($regml(1)).color }
}
return 0
}
$iscolour(nick,channel)
channel is optional, you need to specify channel if you want to match a certain mode though.
It will return the colour if the nick is matched, 0 if it's not.