After banging my head against the wall a few times, I finally managed to find a solution. It's slightly devious but it does in fact achieve the behavior I was initially aiming for. Rather than using the itemChange() callback to communicate ItemPositionChange, I use it to communicate ItemSelectedChange. More precisely, every time a pin is selected, I select it's parent instead. Subsequently, when a translation is initiated, the parent follows the cursor and the pin isn't moved relatively to its parent, as intended.
Thanks again for your help!
PM
Bookmarks