To test a multi-value attribute (e.g. a List or Set) you need to use the .contains() or .icontains() operator.
Why? Well == is a exact match to the string value of $Tags and if ‘curricular theme’ is the only value the match works. But once the second term is added, == is trying to match all of ‘curricular theme;testtag’, with the results you encounter. So, you want a query term like:
$Tags.contains("curricular theme")
This will work whether your match is the only value or one of many for that tag/note.
[later]
This differential need for differing syntax for a ‘value is’ test is explained in my notes on ==. See also .contains() and .icontains().