I think there's a couple of different things going on here which give a confusing result.
Recursive filters are primarily file filters
In the case of operations like delete, recursive filters are file filters. The filter determines for each individual file if it should be deleted or not.
The default behaviour is to recurse into every folder and sub-folder, and then compare each file encountered against the filter, and delete it if it matches.
For folders, the filter is only used to determine whether the operation should recurse into it or not. For a standard filter this is achieved using a Sub folder clause, and for an evaluation filter, the evaluation clause itself determines what the filter is being called for by checking the value of the subfolder
variable.
Folders are not compared against the filter to see if they should be deleted. Instead, folders are deleted if they're empty after the recursion is complete.
Differences between recycle and no recycle
This seems to be a bug. With native (non-recycle) delete, any folders that have been selected will be deleted if they're empty once files within the folder have been deleted.
With the recycle bin it seems that folders aren't being deleted even if their contents are. This discrepancy seems like a bug to me, I'm not sure what the underlying reason for it is but the two operations should be consistent, so we'll get that looked at.
Why the evaluator isn't being called for subsequent folders
This is really down to the nature of the filtered operation, which as described above is a file filter. The evaluation clause will be called for all files to see if they match the filter.
For folders, the evaluation clause isn't called to see if they should be deleted - instead, it's called to see if the operation should recurse inside them. The subfolder
variable will be set to true when this is the case. Returning false from here lets you stop the operation from recursing into the folder (and returning true allows it).
But if the evaluation clause doesn't actually look at the subfolder
variable at all, Opus doesn't bother calling it again for any further subfolders, and instead just proceeds to recurse into them all. This is why in your test you get output for folder 01
but not any of the other folders. If you change your code to output the value of the subfolder
variable as well, you'll then see it being called for every folder.