Implement an Over function
Haskell, 12 bytes

f?g=(.f).g.f

Try it online!
Haskell was made for this.
Let's unpack it:
(f?g) x y =
(((.f).g.f) x) y =
(.f)(g (f x)) y =
((g (f x)).f) y =
g (f x) (f y)

If you're wondering what happens if we make this further pointfree in f and g, we can express (?) as:
\f-&gt;((.f).).(.f)
(.).(.).flip(.)&lt;*&gt;flip(.)

The flipped version of ? that's invoked as g?f is a little nicer:
((.).flip(.)&lt;*&gt;).(.)

(I used pointfree.io for these.)
Test cases copied from Unrelated String.

Haskell, 10 bytes

(.map).(.)

Try it online!
If the input [x,y] is a two-element list, and the binary function g accepts its two arguments as such a list. The main function takes is arguments as g then `f.