When I look at a given shop's event and transactions log, I noticed that the "charge" transactions occur on no real schedule/fixed schedule. I assume that these reflect when a payment actually went through rather than either the merchant's Shopify or App billing cycle. Is that correct?
I've recently investigated the same topics, asked for some support, and I found some answers. Not all of them, and not always satisfactory.
The BillingOn field means when the shop will be charged for the first time. It's used when activating a subscription and having some trial days. For example today 21st Feb I subscribe for an app with 7 days of trial, my billingOn will be 28th Feb. This means that if the shop uninstalls before the 27th, he will not be billed. If he installs on 1st March, he will be billed.
AFAIK, there is no way to "forecast" when the next billing cycle will be. This also depends on the shop's billing setting. As a merchant, you can set a threshold, and you would be billed if the amount you should pay (sum of all the apps subscriptions, usages, blabla) overcomes that threshold.
I hope this was at least a little bit helpful, and I'm looking forward more answers to this topic