I have run into this same situation. Even though I set a field up as a Yes/No data type with a default of "No", it is returned as undefined (even though it looks like a "No" on the EditForm.aspx). If I cycle the value at least once after the record is created, I get a firm true or false return from it. So, knowing that, i agree with Matt that you need to inspect for an "undefined" value as well, which basically means you meant for it to be false on a new record but the value was never initialized as such.
I've noticed if I put a list in datasheet view, I can ever so slightly tell which checkboxes have never been touched (and had a default value of "No" to begin with). They appear to have a slightly disabled look about them as compared to checkboxes that are a firm false value.