I know that giving you a complete solution isn't a good practice but I couldn't resist. Assuming these values:
var arrival = new DateTime(2015, 9, 7, 15, 0, 0);
var departure = new DateTime(2015, 9, 11, 0, 30, 0);
var nightHourFrom = TimeSpan.FromHours(21);
var nightHourTo = TimeSpan.FromHours(7);
var hoursRequired = TimeSpan.FromHours(6);
For each nigh you have certain thresholds to be eligible for the reimbursement. You must arrive before 1am or you must not depart before 3am.
var arrivalThreshold = nightHourTo - hoursRequired;
var departureThreshold = TimeSpan.FromDays(-1) + nightHourFrom + hoursRequired;
Then you simply iterate trough all the days and check if the condition applies:
int count = 0;
for(var date = arrival.Date; date <= departure.Date; date = date.AddDays(1))
{
if((arrival < date + arrivalThreshold) && (departure > date + departureThreshold))
{
count++;
}
}
Be careful about your coding style, create methods to separate logical units of the code. Try to pass all data required by the methods via parameters. This will allow to keep your code clean a readable.