The docx, odt and rtf specifications define specific storage formats. (These do not necessarily relate to the “live” data structure in the app you are working with, although each application has a “native” storage format which enables proper storage of structure.)
So, did you first open a docx and save it as odt, then open that to save it as rtf?
Docx and rtf are both Microsoft-defined storage formats. Odt is specified by an independent entity, and the two entities subscribe to different “schools of typography”. This is one reason why converting back and forth between them is known to cause a mess.
There are other reasons, mostly connected to “standards patching” (in lack of a better term) which makes the result when opening a Microsoft formatted document unpredictable, unless you are using Microsoft software.
Also, rtf is more or less abandoned, and the support for it is not excellent to say the least. Why do you need to save to this format? Can you use something else?