I found that Faces tends to break whenever working hours are defined that either span the entire 24 hour period, or end at midnight.
This is because of the code assuming that the end time is always going to be greater than the start time. In the 24-hour case, it calculates that day as being 0 minutes, not 1440, and in the end-at-midnight case, it calculates the time as being negative.
The original code also had no explicit 'non-working-day' representation.
The attached patch fixes this. 'None' and 'False' can be used to indicate a non-working day. If a day starts and ends on the same hour, it is considered to go for 24 hours.
Fix for faces to handle 24-hour and end-at-midnight times