There is the idea that is worth promoting: Create workflow based on unread leads
As you have found, the IsUnreadByOwner field changing doesn't fire an update trigger.
Could you use the difference between the CreatedDate and LastModifiedDate fields in a formula to indicate the record has been processed? Maybe combined with the OwnerId and LastModifiedById fields.
A slight variation would be to create a trigger that sets a custom UpdatedByOwner field if the LastModifiedById ever equals OwnerId.
Neither of these approaches would indicate the owner has only looked at the lead. They would need to at least modify it. You could embed a Visualforce page on the Lead details page that would set a custom boolean field the first time the owner opens it.
Finally, in Summer 13 there are some new SOQL features coming. One of these if
FOR VIEW and FOR REFERENCE SOQL Clauses
Update objects with
information about when they were last viewed or referenced using the
FOR VIEW and FOR REFERENCE clauses, respectively. A record is
considered viewed when the user sees the details associated with it,
but not when the user sees it in a list with other records.
It isn't clear how we benefit from the FOR VIEW clause in the release notes. I.e. is there a field that this data is available in? It does however sound promising.
When the Lead Assignment is done you could use
FOR VIEW or
FOR REFERENCE to set the
LastReferencedDate respectively. Then, when the Lead is read by the owner you would need to do a
FOR VIEW SOQL query. With these two parts in place you could query the
LastViewedDate column to find if the Lead has not been opened within two days of assignment.