I wonder if there was a change in Scintilla so that configured styles are applied asynchronously
No, Geany does that, `document_open_file_full()` calls `queue_colorise()` which calls `widget_queue_draw()` which will call the lexer when the mainloop is idle and the next frame is drawn. So it returns without having set styles, and then `document_open_file_full()` emits the `document-open` signal that calls `ao_tasks_update()` which won't find the tasks because the styles havn't been set yet.
AFAICT thats been the way its done forever (at least back to 2017 which was as far as I traced it). So in theory it never worked, maybe GTK has changed its scheduling of draws at some point and we didn't notice that this stopped working.
Looking at when `ao_tasks_update()` is called, maybe the process of creating and setting up a tab caused a page switch after the document is drawn and styles are setup. That would emit a `document-activate` signal which also calls `ao_tasks_update()`. IIRC there was some fiddling with this somewhere, but of course I can't find it now ;-P