Here's my answer. Looks like I'm playing on my own. 242 Chars, not including comments.

/// For rules see https://community.intersystems.com/post/code-golf-zcvtstr-leet
/// Build a list where each letter that is to be replaced
/// is followed in the list by its two possible replacements.
/// The next piece indicates which was the last replacement used.
/// Note: Only uppercase letters are in the list so need to
/// translate before searching, using $ZU(28,L,5) to translate.
/// For each character in the input string find its list position.
/// Use $LISTFIND to find its position.
/// Test the position found with Position-1#4
/// Not found characters return 0, and 0-1#4 is non zero so do nothing with them
/// Positions 1,5,9,11,15,19,23,27,31,35,39,43, and 47 contain characters
/// that must be replaced. Position-1#4 is zero for these.
/// No test case or rule for any of the destination symbols already existing in
/// the input string. Introducing that will complicate things as would need to test
/// character before and after current one to try to avoid double letters.
/// When each character is found change the last used replacement indicator.
/// Then return the replacement characters.
/// If the replacement characters contained any of the replaceable characters
/// then you would have to work backwards from the end of the input string
/// to avoid getting in a loop. This would cost 1 character.
ClassMethod Convert(As %String) As %String
{
A=$lfs("A,4,@,,B,|3,8,,C,(,<,,E,3,€,,G,9,6,,I,|,],,K,|<,|{,,L,1,£,,O,0,*,,S,5,$,,T,7,+,,X,><,}{,,Z,2,~/_")
i=1:1:$l(x){$E(x,i)=$$r($e(x,i))x
r(L)P=$lf(A,$zu(28,L,5)) q:P-1#4 $LI(A,P+3)='$LG(A,P+3) $LI(A,P+2-$LG(A,P+3))
}

I've got an answer in 242 characters but I think there's a mistake in the test case:

Do $$$AssertEquals(##class(CodeGolf.Leet).Convert("no no no no "), "n0 n* n0 n*")

Do $$$AssertEquals(##class(CodeGolf.Leet).Convert("Iris"), "|R]5")

The "n" doesn't get converted to uppercase but the "r" does. Surely it should be

Do $$$AssertEquals(##class(CodeGolf.Leet).Convert("Iris"), "|r]5")

and there's a rogue space at the end of "no no no no ".

185 - with an unusual use of $PIECE instead of $SELECT to save 2 characters, which would also shorten yours to 184

c=",",x=$p(a,c,$i(i)) q:x="" f{y=$p(a,c,$i(j)+i),g=$g(g,y-x) q:j*g+x'=y  l="-"_yg=$zabs(g),$p(o,c,$i(p))=s:2-'g<o=o_$s(g:l_$p("/"_g,c,g>1),1:"*"_j),i=i+j-1 g,1

i=1:1:2e6{x=",",a=$p(s,x,i),d=$p(s,x,i+1)-c=1:1{q:d*c+a'=$p(s,x,i+c)q=$zabs(d),v=$s(c>2&d:"-"_(c-1*d+a)_$p("/"_q,x,q>1),c>1&'d:"*"_c,1:0) s:v'=0 $p(s,x,i,i+c-1)=a_vs

Hi Vitaliy,

Out of curiosity I had a go at this. I can't get under 188 using my own ideas and code:

c=",",x=$p(a,c,$i(i)) q:x="" f{y=$p(a,c,$i(j)+i),g=$g(g,y-x) q:j*g+x'=y  l=yg=$zabs(g),$p(o,c,$i(p))=s:2-'g<j o=o_$s(g:"-"_l_$s(g>1:"/"_g,1:""),1:"*"_j),i=i+j-1g,1

You could shave 2 characters off each of your versions by having a variable contain the comma:

x=",",a=$p(s,x,$i(i)),d=$p(s,x,i+1)-c=1:1{q:d*c+a'=$p(s,x,i+c)q=$zabs(d),v=$s(c>2&d:"-"_(c-1*d+a)_$s(q=1:"",1:"/"_q),c>1&'d:"*"_c,1:0) s:v'=0 $p(s,x,i,i+c-1)=a_q:a="" a

I should pay more attention to the $$$MACROs in future!

$ZU(28 is great, it's a shame that Intersystems don't document enough $ZU functions?

The FOR loops that range from 0 to 90/91 don't work with anagrams that contain different numbers of spaces because i=32 checks spaces. E.g. w ##class(CodeGolf.Anagram).Detector("New York Times","monkeys write")

Ah! I stand corrected. Just read %SYSTEM.Util  ALPHAUP removes spaces!

Here is the code for a 69 character answer

/// 73 characters:
/// f x=a,b{f i=65:1:90{s $li(x(x),i)=$l($zcvt(x,"u"),$c(i))}} q x(a)=x(b)
/// 
/// but this one is 69:
/// 
/// loop ascii number from "A" to "Z" and "[", that's 65 to 91
/// if count of each letter in each string is different then quit loop
/// if loop reached 91 then loop completed and letter counts must be same in both strings
/// if loop didn't reach 91 then must be counts must be different
ClassMethod Detector(As %String, As %String) As %Boolean
{
 i=65:1:91{q:$$r(a)'=$$r(b)i=91
r(x)$l($zcvt(x,"u"),$c(i))
}
 

I'm a fan of beyond compare but it is not always available on some of the sites I log in to. I'm not a fan of RCMP. I've got a Diff program that works in a terminal session that I use when I log on to a Cache version 5 site. Feel free to take this and do what you want with it (.MAC routines can be found on ^rMAC):

 
Code