Here's a short and readable approach using LINQ. Note that it's neither tested sufficiently nor efficient. But maybe it's helpful anyway:
DateTime incidentStart = new DateTime(2014, 04, 06, 11, 30, 0, 0, 0);
DateTime incidentEnd = new DateTime(2014, 04, 08, 10, 15, 0, 0, 0);
int minutes = (int)(incidentEnd - incidentStart).TotalMinutes;
TimeSpan officeOpen = TimeSpan.FromHours(9);
TimeSpan officeClosed = TimeSpan.FromHours(17);
decimal numHours = Enumerable.Range(0, minutes)
.Select(min => incidentStart.AddMinutes(min))
.Where(dt => dt.DayOfWeek != DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday
&& dt.TimeOfDay >= officeOpen && dt.TimeOfDay < officeClosed)
.GroupBy(dt => new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, 0, 0, 0)) // round to hour
.Count();
The result is 11 which seems to be correct, isn't it?