Proxy objects are created when they are needed. This means also that identical expressions do not always refer to the same objects.
For example, in People category, the expression birth.place.obj refers to a Gramps internal Place object. But if you use the same expression multiple times in the same query then each one will refer to a different Place object. This matters only if you intend to update the object - changes in one object will not be seen in the other and calling db.commit_place() would not have any effect. Solution is to save the object reference in a local variable, e.g.
# does not work:
birth.place.obj.set_latitude(90)
db.commit_place(birth.place.obj, trans)
# ok:
placeobj = birth.place.obj
placeobj.set_latitude(90)
db.commit_place(placeobj, trans)
So you would have to do something like:
if (gramps_id == "I9968"):
birth_obj = birth.obj
birth_obj.add_note(note.handle)
db.commit_event(birth_obj, trans)
So this is a flaw in the design of SuperTool. Sorry about that!
You need to commit explicitly because the “Commit changes” checkbox only affects the current category (i.e. Person objects in this case).