I think I figured it out!
TLDR: Effects (Buffs/Debuffs) seem to be breaking saves. (Ref: Version 0.3.1, MacOS 10.15.6)
DETAILS:
From my latest clean save (no edits/cheats):
1) Saved on Day 43 prior to heading out to dungeon
2) Cleared troubleshooting ("Wild Wolves") and quest dungeon ("The Distant Den") on Day 43
3) Looted Dungeon
4) Saved/Reloaded Game to work-around "Forget Dungeon" Bug on Day 44
5) "Forgot" Dungeon, Returned to Mansion
6) Upgraded: Rooms, Bedroom, and Tailor
7) Travelled to purchased dungeon ("The Red Cave") and saved game on Day 47
8) "Broken Combat" Bug encountered when attempting to start the dungeon. Quit the game to avoid being stuck in an automated loop for 5 minutes.
Now here's where it gets weird. The saves I took on Days 43 & 44, which worked previously and allowed combat afterwards, are now *also* broken retroactively somehow.
I looked at the logs, and noticed lots of errors tied to "eid" numbers. Looking at the save, they seemed associated with effects of various types ("Static","Temporary","Triggered", etc).
I removed everything with an EID from the main combat party in the save file, and it fixed the issue! So it's somehow tied to these EID effects.
Since most/all of these EID values are only referenced a single time in the save file. I searched the main program code, but it didn't turn up any references to them either. So I suspect these may be temporary buffs/debuffs applied to characters that are only stored in working memory. So long as you don't quit the app completely, they're preserved when you reload a save from the same application session.
It seems like the save file can accumulate a certain number of these before it breaks. I'm guessing there's a function that checks these effects before starting the player turn, and once it reaches a certain threshold, a safety mechanism in the Godot engine kicks in to prevent runaway recursion and kills that function. Some NPCs had at least 3 orphaned EIDs in each of their "Effect" arrays.
Since there's no reference to these EID objects in memory when you load right after opening the app, it seems like once orphaned, they won't ever get cleaned up; I'm guessing the cleanup process for EIDs is built into their object somehow -- maybe a countdown timer for some other killobject function/method?
(Edited to remove further speculation, since a fix may already have been committed for next release.)