A little rewrite of your code, I left out all unused parts in alias theme.notice.
It's working with nickserv etc for me (that is: it does not create a separate @notice.nick window, but it does "theme" the nick in the display of the received notices - dunno if that is what you want)

If you still have issues with nickserv etc, try putting the script higher in "load order".
alias -l theme.notice {
return $+($chr(3),06<,$chr(3),02,$1,$chr(3),06>,$chr(15) $2-)
}
on &^*:notice:*:?: {
if (!$istok(Chanserv Nickserv Memoserv,$nick,32)) {
var %w = $+(@,notice,.,$nick)
window $iif($window(%w),-a,-e) %w
}
echo $iif($window(%w),%w,-a) $theme.notice($nick,$1-)
haltdef
}
on *:input:@notice.*:{
if ($left($1,1) != $readini($mircini,text,commandchar)) {
.notice $gettok($active,2,46) $1-
echo $target $theme.notice($me,$1-)
}
}
on *:nick: {
if ($window($+(@notice.,$nick))) { renwin $v1 $+(@notice.,$newnick) }
}
on *:quit: {
if ($window($+(@notice.,$nick))) { echo $v1 $nick quitted $network $+ : $1- }
}
raw 401:*: {
if ($window($+(@notice.,$2))) {
echo $v1 $2-
haltdef
}
}
Note that I added an "on nick" event, an "on quit" event and a raw event:
1) If the user changes his/her nick and shares a comchan with you, the script will rename the respecive @notice.nick-window (you can keep on using this window).
2) If the user changes his/her nick and is not sharing a common channel, or the nick is quitting, your mIRC won't notice this event. If you now try to send a notice to that nick, you'll receive an error message - this error message is now displayed in the notice window too.
3) If the user quits the network (and you share a common channel), you'll see this in the notice window as well.