Here are my observations from testing an iCloud restore on iOS 9.2 (backed up from iPhone 6S, restored to iPhone 6):
XCode deployed and Enterprise OTA apps appear along with all your other apps in the grayed out state once the restore completes.
If you tap one of them to start it downloading, it gets half way through, then will fail and then the app is removed from home screen (deleted I guess).
If you re-deploy an XCode app while the app is in the grayed-out state, the app will appear non-grayed out, but all the data will be gone.
If you re-download a beta app from TestFlight, the data is gone.
In my testing re-downloading an OTA Enterprise app had the same effect, though I'm not sure if this is simply because the apps in question don't backup to iCloud. My result is inconclusive.
I did not test apps deployed via iTunes AdHoc builds.
The iCloud restore experience is different to when you restore from an iTunes backup, where the icons of XCode deployed apps don't appear on your home screen after the initial sync, but the data is actually there, and once you re-deploy they will show up in the same place, and have their previous data.
My conclusion is that iTunes backups are superior when you want to preserve the data of non-app store apps. I can't be completely sure if this applies to Enterprise OTA apps, but I suspect it does.