Handling Song Changes in Global Rackspace

Well, I forgot about this, but it works so by design. If you try to modify the Global Transpose while in Setlist mode, it will be reset to the transport of your song. See the discussions, here:

It also explains why your callback is called twice. The first time because of your change, the second one because GP resets the transpose to make it match the one of the song.