We're looking to create working solutions, not works of art. Seeking the perfect component for every piece is often simply not worthwhile.
A full blown message queue system is often overkill; it adds another system that you have to learn. (And frankly, queues are often backed by databases anyway)
That said, it's best to avoid having application state in the queue, it should be generic. This makes it more scalable and flexible.
Edit: Just don't pole the 'finished' status as that can have a lot of elements in it.
It isn't nearly the anti-pattern, at least for many loads, in an MVCC database engine.
And anyway, I disagree with that it's an anti-pattern. If you want to capture information about each step of a process, SQL Server (or any RDBMS) is great at that. However, if what you want is a workflow that your RDBMS is facilitating, and you really don't care about the intermediate steps, you just want to make sure it gets done, then there are a lot of workflow systems out there that do a great job. I'm also a big fan of combining workflow software with logging the steps to SQL Server for a straight-forward process.
But again, it depends on what data's being stored and what types of queuing you're doing. One project I've done that comes to mind is to take multiple sources, grab the changes, then store the combined, conformed data in an operational data store, while flagging the rows that were changed. Downstream systems then pick up the changed rows based on their last run and pull those changes down--completely oblivious to the fact that multiple sources are coming together. In this case, you could abstract it away to the fact that it's a queuing system, but there are multiple inputs and multiple endpoints, so a persistent store with that data is paramount.
[1]: http://en.wikipedia.org/wiki/Multiversion_concurrency_contro...
But you need to understand not all jobs are created equal..