and implementation of IsolationLevel.ReadUncommitted and IsolationLevel.ReadCommitted is not correct.
IsolationLevel.ReadUncommitted have READ COMMITTED RECORD_VERSION tpb options, wich is wrong, because in the Firebird ReadUncommitted can be simulated only like this:
read committed no record version no wait
This will cause an error if transaction will attempt to read records with uncommitted versions. Even with this options it will be semi-ReadUncommitted, because Firebird will not allow to read uncommitted data in any way.
Otherwise, IsolationLevel.ReadCommitted uses mentioned above "no record version" option, which does not allow to read only committed versions (error on nowait and lock on wait).
Instead, ReadCommitted must use
read committed record version no wait
This tpb parameters exactly corresponds to the standard ReadCommitted isolation mode.