I believe I have found the issue. Looking at Normandy stage recipe 963 I see several prefs changing. Notably, there is both
browser.urlbar.update1.interventions (and other prefs that start with
browser.urlbar.update1.. To be specific, one pref is a prefix of another in the experiment. This is a pattern I haven't seen before, and is causing this issue.
For some background, to watch for preference changes, Normandy uses
Services.prefs.addObserver. This method takes not a preference, but a preference prefix to watch. To quote the IDL docs (emphasis mine)
The preference on which to listen for changes. This can be the name of an entire branch to observe. e.g. Holding the "root" prefbranch and calling addObserver("foo.bar.", ...) will observe changes to foo.bar.baz and foo.bar.bzip
So when Normandy is registering preference observers for this experiment, it registers one observer for each pref under
browser.urlbar.update1.*, and another observer that listens to everything in that list a second time. This results in the one preference change being observed twice, and Normandy being triggered to stop the experiment twice.
This is a weird case specific to this experiment, and shouldn't actually cause any trouble for the experiment. I don't think this needs to block any experiment. I also don't think this is a high priority to fix (nor am I sure quite how we would detect this issue...)