This is an interesting idea. I may be off base, but I believe there isn't going to be a good answer here, at least not entirely.
The status at a particular time should be stored in the ReportProcessStatusHistory table. You should be able to work backward from your desired date (i.e., "SELECT TOP 1 ... WHERE DatePosted < ... ORDER BY DatePosted DESC") to get the right status from the Status column.
Comments are also easy as they are simply stored by date in the ReportProcessComment table. If I recall user created comments have a ProcessViewMessage column value of 1. ProcessViewMessage values of 0 are generally things created by the system (or workflows therein). This is important though, because some of the 0 value rows are going to be the only place you can get the incident details from a point in time, I think.
The ImIncidentTicket table doesn't store any historical data. When incident details are editing, changes to things like classification, close code, affected user, incident name and description, etc. get overwritten with the new values. The old values and the new are compiled into a "Incident details changed" comment that gets put into the ReportProcessComment table. You'd have to parse the text of the comment in order to get the values that a ticket had at any given point in time. Of course, if the details never changed, then you won't find such an entry on this table.