Think I've got some insight into this one now. It really only seems to be on OS8... the app works absolutely fine on OS7, 9 & 10.
I added (to app's QML) a Timer spitting out a console.info message at a 10Hz rate. This let me identify what else the system was doing in a 0.1s window around the time the app died... and it invariably seemed to be some "dex2oat" thing on some bit of the app.
Apparently dex2oat is something which precompiles bytecode into native code (so-called "Ahead Of Time" compilation). There's obviously something about my Qt5.7 app which causes some trouble on OS8. It works fine on OS7, 9 & 10. A minimal Qt5.7 app also worked fine on OS8. But my app recompiled with other Qts up to 5.10 also broke on OS8.
However.... my understanding (after reading up on it) is that dex2oat only processes an app while it's running when the apk has been installed "developer style" (e.g over USB). If you install via an installer, all the dex2oat processing happens during the "Installing..." stage, before the app runs. However, for development, apparently the system allows apps to be run (presumably interpreting byte code) before having been fully dex2oat processed, in the name of developer productivity and not making people wait.
So, I tested the app installed by the appstore (we use Amazon's, due to a monstrous app size) on OS8. Sure enough, it worked fine. (Before that, all my OS8 testing had been via Amazon Device Farm where you just get to upload an apk to be tested, which is less hassle, and faster than jumping through appstore hoops on a fresh device).
Why the dex2oat thing should be toxic to my particular app when it's installed "developer style" on OS8 alone remains a mystery, but I can live with it when 9&10 are fine and normal users installing via the appstore should never see the issue.
Did find some mention of an app manifest attribute android:vmSafeMode="true". It seemed to make some difference on OS7 (dex2oat command being applied the app changes to include --compiler-filter=interpret-only)... but seems to make no difference on OS8 (the problem one) or later. (I'm going to interpret that as something significant changed in OS8, broke something enough to cause my app some trouble, and then got fixed in OS9+. But who knows really.)
Be interested in any comments from someone who understands more about what's going on!