Could this be a problem with script execution order in Unity?
I had an issue where I was trying to rotate a bone to aim towards a touch location and then proceed to fire a weapon. By default, scripts are loaded at random and then executed in said random order. In my case, an issue would arise where the skeleton update would get called before my input event that triggered a bone rotation and weapon fire.
Even though in my code it went something like:
shoulderBone.transform.localRotation = aimRotation;
equippedWeapon.Fire();
Because skeleton update was called first, what really happened was the above code would execute on frame 12 for example, and the skeleton wouldn't update until frame 13 since it's update was already called in frame 12 before I told it to change any rotations.
Perhaps something like this is happening to you? The attachments are updating, but then your event that triggers an attachment change is happening after they already updated for that frame. Perhaps try to use the Script Execution Order and have your input events happen before default time so that way they occur before the skeleton updates.
This at least fixed my issued to get the skeleton to update after I did any runtime modifications. Hopefully it's a similar issue for you.