The issue that prompted me to ask this is a web form that was not persisting data the way I expected it to. That's vague, but the point is, what do you like to do to model state, flow of data, and so forth?
I'll put my obvious (to me) answer, which is to use the whiteboard. Love the whiteboard.
I'll second the whiteboard answer and add that explaining what is supposed to be happening, following by verbalizing what the the code is actually doing, along with a basic graphic is hugely helpful for any project.
Whiteboard as well, but be familiar with the UML diagrams. I've had a lot of luck with sequence diagrams--they do a good job of describing the interactions between parts of a system.
I've seen people use state diagrams, but they don't contain as much detailed information--sequence diagrams impressed the hell out of me when I first saw them.
Graphviz is a great tool for diagramming state machines (once you've worked them out on the whiteboard).
I think the typical models work fine:
for example - state diagrams
http://en.wikipedia.org/wiki/State_diagram
I second the whiteboard use. They are second to none in working on state, flow, etc.
The UML has 2 diagrams that may be useful
State diagrams for modelling state.
Activity diagrams for modelling data flow.