My description of the bug was hasty. The viewer is still broken in the same way, but I realize now that the text is not invisible or unselectable. Rather, selection still works but only displays selection markers at the upper left corner of the screen. According to a bug report about Calibre, similar things can happen if the fonts are not properly installed (https://www.mobileread.com/forums/showthread.php?t=315146). However, I checked a working version and broken version of my Guix profile against one another and the fonts appear to be installed correctly in both trees.
While doing that, I also noticed that __pycache__ directories only exist in the broken tree. Is that a signal of something going wrong or just a change in Guix's Python?