I'm trying to help here - giving the relevant information will help me help /you/. And giving it succinctly rather than buried within pages of generated assembly would be far more useful.
It is /your/ job to know the meaning of a type in a programming language before you use it.
The Arduino folk might not make that as easy as it should be, by encouraging non-standard types like "boolean" without proper documentation (and even worse, where the semantics apparently vary according to versions). Still, it is /your/ job.
Feel free to ask here, or in comp.lang.c or comp.arch.embedded to get help on the matter. Just remember to give the information people ask you for, and to accept that it might be /your/ misunderstanding rather than blaming the compiler.
That is correct behaviour on the part of the compiler. The compiler's job is to generate efficient code on the assumption that the code it is given is correct C (or C++ in this case). If you sneak a value of other than 0 or 1 into something declared as "bool", you are breaking your side of the bargain. The compiler is not omnipotent and cannot read your mind or guess what you /really/ meant.
And again, I fully understand how you can make this mistake, how the Arduino stuff makes it difficult, and how some aspects of the C language can be hard to understand. That's why I encourage you to /ask/ about it, giving the relevant information, rather than throwing blame around.
If U.dat.flg is declared as "bool", then the compiler knows that U.dat.flg is already a properly initialised bool. You would not want the compiler to generate a series of unnecessary instructions doing tests and jumps simply to assign from one bool to another.
You lied to your compiler, albeit unknowingly and unintentionally. It bit you. That's what happens when you lie to your compiler.
Yes, but hopefully you now understand that the compiler did not make any mistakes - the error was in your code. And you know that you have not just "found a workaround" - you understand the problem, and understand the correction to your code error.