My adage has always been "if you can't teach it to someone with a minimal background, you don't really understand it." If I really need to study a topic, I prepare as if I was going to give a lecture on it. That usually makes it painfully obvious where the holes in what I know are.
I sometimes use this when not writing anything that is destined to directly go to other people in order to help my understanding. When working on a confusing problem I try to write it down as if I was explaining it to another person, and verbalise in my head what I have written (I'm liking the TTS solution someone mentioned elsewhere in the thread, I might have to bring some headphones into work and try that). It is surprising how often making myself write down the problem as if explaining it to another person makes the blindingly obvious solution that I'm until that point missing (or just over complicating) jump out.
Thinking of the problem as if you have to explain it to someone (even if that someone is an imaginary friend version of myself) forces me to organise my thoughts in a more structured manner (this leads to that which causes the other because of the thing that does the things to the other things so I considered that update but that would conflict with function X... - for more complicated things I'll even draw myself a diagram) which highlights the parts I'm skipping over but shouldn't be.