What SuicideJunkie said. Either the logic in NumberOfDaysBetween is wrong or you have to test the subroutines in there (NumberOfDaysInMonth and cumulativeDaysInMonths) similar to NumberOfDaysBetween. If one or both of them produce wrong results then plaster them with print statements until you know what is going on.
PS: Looked at your code again and subroutines are difficult to see because there isn't even one empty line separating them. Programs are easier to read for humans when structure can be seen at a glance. I even tend to separate subs with lines like "#----------------------" additionally to a few empty lines.