That's easy:
You have:
ndays = DateDiff(DateInterval.Day, firstdueDate.AddDays(dblamt4), firstdueDate.AddMonths(weekInt3))
Where you're doing difference in days between firstdueDate and some fixed amount (say 31)
And your weekInt3 is increasing with each iteration so you have difference between fixed number and increasing number of months
I think you need to use secondeffDate in that calc...
That said, I didn't read whole of your code, just that last loop with ndays so maybe I'm missing something.
Even if it is not secondeffDate, it definitely is something along that line.
Finally, while your explanation explains what is wrong, it doesn't give anything about what it SHOULD do so I cannot say definitely WHAT the solution is, just the reason why you have increasing difference.