Ok, so I ordered a new SD card to rule out file system corruption. Installed Octopi, made a point of not installing any plugins besides the network health plugin that I apparently need (despite no other Pi4 in my network having any connection issues whatsoever) and tried a long print again. It failed again, three hours in, same symptoms as in my original post:
2022-02-05 17:19:20,259 - octoprint.server.heartbeat - INFO - Server heartbeat <3
2022-02-05 17:34:20,261 - octoprint.server.heartbeat - INFO - Server heartbeat <3
2022-02-05 17:49:20,262 - octoprint.server.heartbeat - INFO - Server heartbeat <3
2022-02-05 17:52:40,291 - octoprint.util.comm - INFO - Communication timeout while printing, trying to trigger response from printer.
2022-02-05 17:52:43,301 - octoprint.util.comm - INFO - Communication timeout while printing, trying to trigger response from printer.
2022-02-05 17:52:46,304 - octoprint.util.comm - INFO - Communication timeout while printing, trying to trigger response from printer.
2022-02-05 17:52:49,308 - octoprint.util.comm - INFO - Communication timeout while printing, trying to trigger response from printer.
2022-02-05 17:52:52,309 - octoprint.util.comm - INFO - Communication timeout while printing, trying to trigger response from printer.
2022-02-05 17:52:55,312 - octoprint.util.comm - INFO - No response from printer after 6 consecutive communication timeouts, considering it dead.
2022-02-05 17:52:55,338 - octoprint.util.comm - INFO - Changing monitoring state from "Printing" to "Offline after error"
2022-02-05 17:52:55,350 - octoprint.plugins.action_command_notification - INFO - Notifications cleared
2022-02-05 17:52:55,363 - octoprint.server.util.sockjs - INFO - Client connection closed: <ip>
2022-02-05 17:52:55,517 - octoprint.server.util.flask - INFO - Passively logging in user NMe from <ip>
2022-02-05 17:52:55,517 - octoprint.access.users - INFO - Logged in user: NMe
2022-02-05 17:52:56,406 - octoprint.server.util.flask - INFO - Passively logging in user NMe from <ip>
2022-02-05 17:52:56,407 - octoprint.access.users - INFO - Logged in user: NMe
2022-02-05 17:52:56,906 - octoprint.server.util.sockjs - INFO - New connection from client: <ip>
2022-02-05 17:52:57,029 - octoprint.server.util.flask - INFO - Passively logging in user NMe from <ip>
2022-02-05 17:52:57,030 - octoprint.access.users - INFO - Logged in user: NMe
2022-02-05 17:52:58,489 - octoprint.server.util.sockjs - INFO - User NMe logged in on the socket from client <ip>
2022-02-05 17:53:13,329 - octoprint.util.comm - INFO - Changing monitoring state from "Offline" to "Detecting serial connection"
2022-02-05 17:53:13,355 - octoprint.util.comm - INFO - Serial detection: Performing autodetection with 7 port/baudrate candidates: /dev/ttyUSB0@115200, /dev/ttyUSB0@250000, /dev/ttyUSB0@230400, /dev/ttyUSB0@57600, /dev/ttyUSB0@38400, /dev/ttyUSB0@19200, /dev/ttyUSB0@9600
2022-02-05 17:53:13,355 - octoprint.util.comm - INFO - Serial detection: Trying port /dev/ttyUSB0, baudrate 115200
2022-02-05 17:53:13,355 - octoprint.util.comm - INFO - Connecting to port /dev/ttyUSB0, baudrate 115200
2022-02-05 17:53:13,371 - octoprint.util.comm - INFO - Serial detection: Handshake attempt #1 with timeout 2.0s
2022-02-05 17:53:13,373 - octoprint.util.comm - INFO - M110 detected, setting current line number to 0
2022-02-05 17:53:14,331 - octoprint.util.comm - INFO - Changing monitoring state from "Detecting serial connection" to "Operational"
2022-02-05 17:53:14,372 - octoprint.util.comm - INFO - M110 detected, setting current line number to 0
2022-02-05 17:53:16,497 - octoprint.util.comm - INFO - Printer reports firmware name "Marlin Ver 1.70.0 BLZ- (Creality3D)"
2022-02-05 17:53:16,504 - octoprint.util.comm - INFO - Firmware states that it supports temperature autoreporting
At this point what used to be a fun hobby is turning into an increasingly frustrating can of worms. Octoprint is supposed to help make printing easier but right now all it's doing is causing frustration. Any help anyone could offer would be greatly appreciated. Or even just a way to keep testing if things are working now without having to waste filament.