SOLVED - Changed code to use explicit transactions and the problem went away, so I guess implicit transactions was "keeping the transaction opened" for a few extra milliseconds... while the other "process / thread / or ODBC object" was trying to read the data added by the last transaction, and as it was not commited yet, the data was not visible. Many many years ago, like 15 years ago, a friend who advised me to use Firebird told me "dont use explicit transations with Firebird; you'll be better of leaving Firebird manage it implicit..."; it did not sound correct then.... and it came back to bite me now...
Cheers, Fabian