Found solution
I had to provide wallet instance with seed phrase that has ETH on account, otherwise dryRun doesn’t work on account without ETH on balance. Is it feature or bug?
Note: Although a simulate() call won't modify the blockchain's state and does not spend resources, the transaction must still meet its requirements to be considered valid.
The reason it was indirectly fixed by adding the Wallet instance is probably due to the resulting increased latency in the code execution, which created an opportunity for the initialization to finish.