Thanks! It finally works!
I checked worldObj.isRemote in #transferStackInSlot because it seemed to remove that issue when shift-clicking. Now, when I iterate through stacks in #onInventoryChanged, I don't need that.
When I was changing my code basing on your advises, I observed one interesting thing:
Calling super on #onInventoryChanged should do something, because it's implemented in Basic TileEntity from Minecraft. Also, I found out that TileEntityFurnace doesn't implement onInventoryChanged.
When I'm implementing a method and super does nothing, then eclipse shows an error if I try to call it.
Anyways, I removed that super - it did nothing in my case.