I realized I never wrote back to the list about the solution (so others who might get into the same kind problem can see what the actual problem was for us).
The problem wasn't caused by the update to a newer version of sqlite. By coincidence the firmware which included the new sqlite version got published at the same time our logistics started shipping a new wireless accessory (we create custom hardware), for which the implementation was done long time ago. So we were looking at recent changes in the firmware since it had been running a long time without problems, but we were unaware that the accessory which sometimes trigged the bug in the firmware hadn't been used much in the field earlier. The actual problem was caused by a reader object which didn't get finalized correctly. The reader object was declared outside (before) the intended scope by mistake, so the finalize() which the objects destructor normally takes care of didn't get called when it should. ..Which lead to that thread-X kept the connection open while thread-Y updated the database. So when thread-X tried to promote a read to a write transaction it of course failed since the underlying data had changed. Thanks!