Uno R3 with Multiple Shields - Reset Required to Finish Loop

I have a sketch put together (definitely not the best in the world) for an Uno R3 with an Ethernet Shield (based on W5100) and a USB Host Shield (SainSmart compatible from Amazon)

The purpose of this project is to act as a translator between an X-Keys Stick and a Blackmagic Design Atem switcher.

I have the baseline sketch done and it works great when still connected to my PC. The Ethernet shield continues to use pin 10 for SS, while the USB shield used Pin 4 for SS.

The issue arises when I power the Arduino from an external supply or via USB from a wall charger. The Arduino and shields all power up and everything appears to function properly, but the XKeys inputs are not read. The interesting part is that the Atem switcher statuses are reporting properly so the USB interface is at least somewhat functional.

If I hit the reset button on the Arduino, after coming back up, suddenly everything is fully functional, XKeys and all.

I've tried every option in terms of resistors, diodes and capacitors (between TX/RX, RX/GND, Reset/GND, Reset/5V) that I could find online from older models to try to rectify the issue, but I cannot find a root cause.

The reset making everything work is what is blowing my mind more than anything. If it straight up didn't work at all, it would make more sense to me that this would be a programming issue.

Is there any resistance I'm missing on the USB data lines being disconnected that pushing the reset button helps resolve to explain why a reset brings everything up normally? I've attached my sketch below as I kept hitting the post character limit..

I'm willing to try any ideas at this point, because like I said, I've been through every old post I could find and I cannot find a working solution to this problem.

I'm hopeful I just missed something as this is realistically my first project ever for Arduino, so I would love any help or insight anyone would have.

program.ino (10.2 KB)

I added a few paragraph breaks, your post was hard to read.

I don't see anything obviously wrong, however it sounds a little like some memory corruption, where after resetting some variable, previously undefined, now has a value that allows it to work.