Please see below - I am sorry I don't have logs now - I just wanted to explain what I have encountered.
As I said, the oat files (that is what otherwise in Dalvik would be the JIT cache) are just not generated upon boot. The flow is supposed to be as follows:
1. When an APK is installed (for the sake of discussion, first boot is like "APK is installed") -
1.1 if the OAT files (which are not really OAT, not mentioning the details anymore as I assume they are known) do not persist - there will be a Logcat error mentioning that.
1.2 Otherwise proceed...
2. That means that if nothing is DEX_PREOPT-ed (WITH_DEXPREOPT := false) - we'll have a longer boot - This works
(but for a reason I really don't understand - it makes the Browser crash on some stack overflow - I suspect memory leaks, but I really don't know at the moment.
I am pretty sure it's something with memory as what crashes are some checkjni stuff - but this combination only happened when I did both Browser, VESA (qemu=1), and DEXPREOPT := false. Maybe it would work on "real device" with GPU. It happened when I tried to use google apps, so maybe GmsCore gave its issues, but I don't think so really.)
3. And that's pretty much what happens when you kill zygote/system_server and see an "App 1/<something> is updated".
3.1 So what we see when we do LOCAL_DEX_PREOPT, which for some reason was the exact same as leaving WITH_DEXPREOPT := y, which didn't build the OAT files for the BUILD_PREBUILT apk - is nothing at the first boot.
3.2 "App X/Y updating" - but that does not fix the issues so something with the update is wrong.
4. Installing an app (adb install whatever.apk) - does the job so I think something is only wrong with the initial detections.
I would have to look at it more seriously, and I am aware this is not the best of reports.