AS I mentioned, I effectively just broke the combined && clauses in the if statement in your code into separate if's. I also added an extra check, but that is only a belt'n'braces as I am transmitting as well as receiving. I cannot see anything wrong with your logic or syntax.
I find with your original code, and with my extra clause it would often see the first packet on the channel it was listening to for new transmitters, but then fail to pick up the subsequent one. Often it would only 'lock on' to the first transmitter when it saw the first packet from the second transmitter - or it timed out and went into 'broadcast listening' mode again.
With the separated if clauses it picks up the a new transmitter and always get the channel 1, 2, 3 packets. I cannot explain why as the code logic is the same!
I have just found a problem with my relay code - one a error on my part, I was not resetting the bad battery status after it cleared, now fixed.
I had a weird packet from my anemometer last night...
C8-C0-00-00-A8-40-5C-D9-E5-C9
Which the console interpreted as a wind speed of 194 mph direction 0. The VPtools decode said it was an unknown packet without valid wind data. This is what also triggered me to find the battery status bug.
Whats concerning is that the check sum apparently passed, and then I "lost" that transmitter for 80 seconds, then picked it up again without having to re-sync on it. So did the transmitter have a funny turn?
EDIT: Budder! My rain gauge reed switch has packed up today - anyone know what the replacement component is off the tops of their head?