It's been a few years that I experienced with the background refresh feature, but I don't think things have changed, so I hope this helps :
Here's what Apple writes about Background refresh :
"Apps that update their content frequently, such as news apps or social media apps, can use this feature to ensure that their content is always up to date. Downloading data in the background before it is needed minimizes the lag time in displaying that data when the user launches the app."
And how does iOS decide when you're app is allowed to download in the background (using this feature) : it's based on the usage of the app. If the user opens your app let's say every day between 8 and 8h30, then after a few days, you will see that the background refresh feature reactivates your app, maybe before 8, probably also between 8 and 8h30. So the app can download the content before the user even opens the app.
Sounds nice but it's actually useless.
A bit better (or even a lot better) is to use silent remote notifications. It's the same feature but your app is reactivated because a push notification is sent to your app. You can use a silent notification that the user doesn't hear or see, it just activates the app , see Apple documentation.
I experimented with that too using the service offered by Quickblox. That worked quite well actually.
There are other methods, as described here, see respond to important events in the background. But you probably don't need any of these like bluetooth, location, play audio etc.
An app in the background can not read from HealthKit, only write.
Be aware also that if your user closes the app (force close), then it's done, there's no way to reactivate the app in the background.
And for other reasons iOS may decide to kill your app, like if it consumes too much battery or memory.