Your start date and time appears to be
2020-04-20T18:30:00.000Z
despite your pseudo code above. Because that is what you have listed as your results: recurrences at 18.30.
With a daily recurrence at those times, 2020-04-28T18:30:00.000Z would be AFTER 2020-04-20T00:00:000Z.
So make the start date or datetime and end date or datetime consistent. From https://icalendar.org/iCalendar-RFC-5545/3-3-10-recurrence-rule.html, it says:
The UNTIL rule part defines a DATE or DATE-TIME value that bounds the
recurrence rule in an inclusive manner. If the value specified by
UNTIL is synchronized with the specified recurrence, this DATE or
DATE-TIME becomes the last instance of the recurrence. The value of
the UNTIL rule part MUST have the same value type as the "DTSTART"
property. Furthermore, if the "DTSTART" property is specified as a
date with local time, then the UNTIL rule part MUST also be specified
as a date with local time. If the "DTSTART" property is specified as a
date with UTC time or a date with local time and time zone reference,
then the UNTIL rule part MUST be specified as a date with UTC time.
change UNTIL to 2020-04-28T18:30:00.000Z if UTC time intended or
2020-04-28T18:30:00.000 if floating time intended.
Basically DTSTART And UNTIL must match.