Try OnObjectValidate instead.
You won't need the go to object step.
The problem is, I need the script to run BEFORE the popover actually opens up.
Add the following to your script:
Exit Script 
//Whatever is your script that removes the focus
Set Variable [$$SkipTrigger ; Value: 1]
Go to Object [Object Name: "popover"]
Set Variable [$$SkipTrigger ; Value: 0]
of course it goes into an infinite loop because you go to the object which has a trigger on it, thus firing the trigger again.
The solution given by arjen removes the problem but it's a fix to a problem that should not exist to start with, so you'd better detail further what it's all about so we can understand and offer a hack-free alternative.
And as a general idea, do not name FIELDS, name objects.
In a popover, the popover: content can be selected and named: name it and go to it, instead of going to a field.
can we see your script? onObjectEnter ScriptTrigger the script runs prior to the popover opening ... so should work as you intend.
Ok... the popover has a single uneditable field on it. The script needs to run before the popover opens because what it does is check a bunch of fields to see if they meet a certain criteria, then populates the field located on the popover with those field names that do indeed meet that criteria. That's it in a nutshell.
Put a 1 in the Hide if condition of your popover button and put a normal button on top. You don't need triggers, run the script attached to the normal button to gather what should be gathered and finally end your script with go to object to open the popover.
Even the popover button is hidden, the popover will still open.
so the popover is kind of a overall check of the validity of data and reports fields that do not have a valid value in them, summing it all up in a -hopefully - global field ?
Please be specific, guesswork is fun only up to a (quickly reached) level.
Note that some of us might even be as bold as questioning whether your choice of bringing in a popover to sit at the table is a good choice or not.
If you want a useful answer describe the initial setup (as a user I would like to ...) and the problem to be solved, and let the community choose what the best method of solving it is.
You are exactly right, except for the part about the global field. The popover field is not global because each record has a different set of fields that are flagged as meeting the script's criteria.
The overall goal is to have the button show the user if there are fields with redundant carriage returns so he has the option of editing them to remove that extra spacing. I thought an unobtrusive popover that toggles visibility off if there are no "problem" fields Would be a good way to go.
Thing is, it's possible to check the values on your layout without moving the focus to a location outside of your popover thereby avoiding the whole problem.
And that's why we've asked to see your script.
I'm not sure how to copy the script into the dialogue here. But it's super simple. All it does is check a variety of field to see if there are any instances of "¶¶" and if so, it adds that field name to the field that's located on the popover, thereby providing the user with a list of fields that he can modify if desired.
I'm sorry... with OnObjectEnter script trigger ... the script actually runs after the popover opens. But, even so your popover should not close . unless the field you are going to in "go to field script step" is outside your popover. can you get rid of that script step and test.