I played all of the compo games in Mesen with every developer option turned on (and using Random Values for "Default power on state for RAM"). Those are the options in the top half of Settings -> Emulation -> NES. They're off by default because they usually just make the experience worse for non-developers, but developers should really keep them on to catch real-hardware bugs. The symptom is that the game's palette will be randomly wrong when the game is repeatedly power cycled, because palette RAM will start with random contents and the game's palette writes are ignored by the PPU when they occur during the first ~30,000 cycles. On a real console, this probably only matters if the game is on a real cartridge rather than a flash cart; with a flash cart, the PPU won't be initializing when the game first launches and the correct palette will already be in palette RAM when the game is reset.
In terms of code, I think your issue is just that you don't do a single BIT $2002 (PPU STATUS) before your first call to the function that waits for the bit 7 of $2002 to become 1. Apparently the state of this flag is random at power-on and you need to make sure it's clear before the wait loop.
I'm really happy to see new developers submitting things to the competition and I'm hopeful you stick with it! :)