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.