In your Perform Find, I would remove the criteria. You seem to enter find mode, set the field for what you're looking for and should just perform a find.
Its hard to follow the logic of this partial script. I guess the If statement/step is so if you don't find the email create a new record? I would think you should use Get(lasterror)=401 // no records match find request, or Get(lasterror) <>0. I would also set error capture to "on"
OK, got rid of the criteria and yes, if there are no records found the script goes on to create a new record.
Running the Debugger it shows that no records are found for a sample email for which there is definitely a record; in fact I have that record open on the layout while performing the find and the email/record disappear when I get to 'perform find'. However, I'm not clear on what to do about this.
The @ symbol is a find operator. If you want to specify the @ operator as actual find criteria and not that operator, the text with that character needs to be enclosed in quotes.
Both of the following examples achieve that end:
Set Field [Users::email ; "==" & Quote ( $Email ) ]
Set Field [Users::email ; "==\"" & $Email &"\"" ]
Great the: "==" & Quote ($EmailFind), did the trick.
I'll start to chew on the next error!