Better way to write this branch with an exceptional retry in an embedded C environment?
If you can do without the received variable...just make the radioReceive(...) the condition of a while loop.  You get rid of received, and your loop condition now has a purpose.  :)

while (radioReceive(radiogram, MatchTree, CycleClock, duration)) {
    if (radiogramIsValidForSync(radiogram)) return true;
}
return false;


The only real drawback is that it gets a bit awkward if you need to do anything at both exit points, other than return.