The IRODSFilesystem implementation attempts to follow the C++17 standard by performing various checks before invoking the iRODS API (e.g. rcDataObjRename). The server likely performs those checks already, so clients pay the penalty of those checks twice.
Let's investigate just calling the rc-functions directly?