I forgot to update this post but we found the solution. We were fighting two problems/errors.
1) When a queueitem is closed from an opportunity the message that fires against the queueitem is Update, not one of the setstates. This seems contrary to every API document I have read but it is what it is.
2) Our Update plugin was firing but I was using late binding and I capitalized "StateCode" without paying attention. This made it look like it wasn't passing the statecode even though it was firing on it specifically. Once I corrected this error on my part all was well.
I kept reading documentation and forum posts that seemed to indicate that the Update message didn't pass the StateCode anymore and that you had to catch the SetStates to get it. I let that guide my debugging a little two much and worked myself into a corner that I shouldn't have.
Thanks for the follow up.
Jason