We're currently having an issue with the player_virtual_currency_balance_changed. We're essentially using it to clamp the quantity of an energy currency in a range from 0 to 5. I've set it up so if we have a player_virtual_currency_balance_changed event that has the relevant VirtualCurrencyName and a VirtualCurrencyBalance outside of the prescribed range it triggers a CloudScript function that either adds or subtracts the relevant amount to get the currency to where we need to be.
While this initial function clears it up properly, I'm seeing a second triggering of the CloudScript. Looking at the relevant player_virtual_currency_balance_changed event, it has the expected VirtualCurrencyPreviousBalance (i.e. the balance before we cleaned it up with the CloudScript function), but the VirtualCurrencyBalance itself is identical to the VirtualCurrencyPreviousBalance. Obviously if these two fields are identical then a player_virtual_currency_balance_changed event shouldn't be fired, so it would appear there's a consistency issue of some kind going on here.
I've resolved this, for now, by doing a GetPlayerCombinedInfo call inside the CloudScript function and using the currency values returned from that to calculate any changes that need to be made, but this is less than ideal.