But obviously something is still amiss, given that I have a few bad reads.
Nick, Python is the macro language in this instance.
OK, I think I get that. Python is just another avenue of communication and none the Arduino code is written with Python in mind. If so, you can check where your problems lie simply by sending the serial prints to a more appropriate computer, i.e. one that can make sense of them directly. Since you have " a few bad reads ", I take it that you have quite a lot of good ones. I submit that is enough to tell you emphatically that there is nothing wrong with your Arduino code, and I bet all your problems are further downstream. Once proven, I guess the first thing to do is ensure that the signal "failed to get data from Arduino" works when it is supposed to. You can be pretty sure any added delays are literally a waste of time. They aren't going to fix anything as far as Arduino is concerned and I don't see how Python etc. can benefit from them.
I think WildBill's comment could be much more to the point. Some dumb procedural thing like that is just the thing to cause a hiccup.