I'll make the example with ros1 branch, though on ros2 branch you should find the same code.
First of all, if odom_frame_id parameter is set to rtabmap node, it won't subscribe to any odometry topic, it will just use TF to get the pose and the covariance will be fixed by odom_tf_linear_variance and odom_tf_angular_variance parameters.
In your case, when rtabmap is subscribed to the odometry topic, between two rtabmap updates, it will keep only the largest twist's covariance for the next rtabmap's update. This is done in this function:
https://github.com/introlab/rtabmap_ros/blob/ef8ec4357d76fc83351acfaff0fc31c778214f46/rtabmap_slam/src/CoreWrapper.cpp#L1090C1-L1094That callback is not called for every odometry topic, but only those that have been synchronized with the input sensor data. For example, if rtabmap subscribes to camera images at 30 Hz, lidar scans at 10 Hz and odometry at 50 Hz, the callback will be called only at 10 Hz, so only 10 of 50 odometry topics will be processed. With RTAB-Map's detection rate set to 1 Hz (default), only the largest twist covariance of these 10 odometry topics will be added to the map's graph.
Instead of keeping only max covariance at line 1093 in the link above, integrating them could be better. We could do something similar to what we do
here to update localization pose's covariance by integrating odometry's covariance. That way, the 10 odometry topics (in the example above) would be integrated together.