I think there is a bug with the `:cache' header and how results of evaluation are wrapped: Using `:cache yes' and wrapping the results prevents later blocks using the cached results.
To reproduce, start with an example like the one at the bottom of the documentation in <https://orgmode.org/manual/Evaluating-Code-Blocks.html>. Then add something like `:wrap src R' (or `:results value drawer') to the header of the block named `random' and the second block produces `nil' instead of the desired result. I verified the bug using `emacs -nw -q' with version 9.3 but would be happy to send more information if the above is not enough to reproduce. Thanks.