The "single exit point" restriction always bothered me. I understand that it can be confusing in a large or complex function and result in later changes being incorrect, but I think the proper solution to that is not writing overly large or complex functions. Because of this I write things like AABB checks thuswise:
bool checkCollide(RECT &thisRect, RECT &otherRect) {
if(thisRect.left > otherRect.right) {return false;}
if(thisRect.right < otherRect.left) {return false;}
if(thisRect.top > otherRect.bottom) {return false;}
if(thisRect.bottom < otherRect.top) {return false;}
return true;
}
It's true that you have to engage your brain for a moment to see that it works, but that's true for other solutions as well. This way is compact and straightforward. Once you understand the method, any potential errors are immediately visible.

Find content
Not Telling