Unfortunately, contrary to the post from MAllen, finding out if the SPWorkflowState is Running, Cancelled, Completed, Expired, Faulting, Locked, Suspended, Terminated, etc. is not the same thing as finding out the actual status of an item's workflow, as displayed in SharePoint on a list item.
There is usually a column displayed for a workflow. Let's say the workflow is called "Messages". There would be a "Messages" column on the list it is associated with. (The workflow could also be associated with a content type, but the content type still has to be associated with a list, so the column should still be on that list. From SP 2010 on, if you have the max number of lookup fields on your view already, I believe 8, the column will not get created when the workflow is added. You'd have to lower the number of lookup fields in the view and remove/re-add the workflow.) Using
myListItem["Messages"].ToString();
in this example, should give a number corresponding to the actual status. Here is the key for figuring it out:
0 = Starting
1 = Failed on Start
2 = In Progress
3 = Error Occurred
4 = Cancelled
5 = Completed
6 = Failed on Start(Retrying)
7 = Error Occurred (Retrying)
15 = Cancelled
16 = Approved
17 = Rejected
null = Non-Start