When you're looking at starred messages, you know that a) you've already read the message, and b) there's an important task you need to do. Your job is to remember what you wanted to do and get it done. When you're in your inbox, you know that your seeing new information and your job is to decide whether or not its important.
This distinction may sound trivial, but it makes a huge difference. Think of it this way: When you read a message and then mark it as "unread," you're throwing away all the work you've already done in reading and evaluating it. Next time you encounter the message you're starting from scratch. By starring it and taking it out of your inbox, you give yourself enough of a cue to quickly resume processing the message where you left off.
Things you don't want to see again should absolutely be archived. But if you're using the Gmail web interface, you don't have to slavishly adhere to a literal interpretation of "inbox zero".
What is important is limiting the distraction caused by new mail. If you're working through your todo items and new messages are getting added to the list, they'll distract you even if you don't read them. Of course, you probably will read them, which is even more of a distraction.
By keeping todo items on a separate list, you can keep your attention on your work, rather than on new messages. Then you process the inbox only when you choose to direct your attention to it.
The shortcuts in the post are a huge help. I always knew they were there but never thought about how they would work in a process as described in the OP. I'm going to try using the web UI with those now instead of Sparrow.