I found the culprit in opening org files before loading the new version:
(add-to-list 'load-path "~/code/org-mode/lisp")
In a comment in that thread, I mentioned that the above loading commands failed to load
9.3.3 if I ran
(org-version) first, so I suspect that running any org command fixes the Org version to the built-in version of org mode and that loading a more recent version introduces compatibility issues.
When I run the code to load the new Org version before any other Org command, org mode runs fine.
See this answer for details on the mixed installation of built-in and latest versions:
The main idea is that you need to make sure that Org mode is set up,
using the new bits that you downloaded only. Emacs comes with a
version of Org mode bundled up with it, but that is inevitably older
than what is available from the Org mode git repo. It is important to
avoid loading any piece from the bundled up version or else you might
end up with a "mixed" installation (there are many hits for that on
the Org mode mailing list).
As I mention in a comment, and @Tobias has verified in another
comment, you do not need to byte-compile the new version - you only
need to make autoloads. That creates an org-loaddefs.el file, so that
all the common entry points into org will, when first invoked, load
the appropriate file first. It is important ... to set the load-path before loading the
org-loaddefs.el file: otherwise, you may end up with the dreaded
"mixed" install I mentioned above.