Thanks for helping me...
I don't think the issue in pulling data, as that code is small and well guarded. Weather and exchange rates requested every hour at the same time, one after another. Sometimes even more frequent, in fact, it could be once in 5 min - you just need to switch from the watch-face to any other widget and then switch back, to initiate pull data requests.
So, if it was a web request issue, you'd notest that WF crashes every time when you trying to switch back to WF or receiving a notification from the phone.
Another thing is that crashes happened mostly on 5X, so I suspect that 5X does not support some features that WF is using or some times the system returns unexpected results.
The crash log is provided by garmin and it turns out it useless.
Good. Looks like the issue was with access to storage on the device. It turns out there is a bug on the firmware that Garmin still unable to fix. (https://forums.garmin.com/developer/connect-iq/i/bug-reports/file-not-found-error )
I fall back to an old approach with store data in app properties and it seems that this helps, at least the number of errors had reduced significantly.