A family of Microsoft spreadsheet software with tools for analyzing, charting, and communicating data.
First off, your formulas would be a lot easier to read if you only used the worksheet name once when referencing ranges.
'May Invoice Forecast'!$D$6:$D$44
is the same as,
'May Invoice Forecast'!$D$6:'May Invoice Forecast'!$D$44
So you formula would be,
=COUNTIFS('May Invoice Forecast'!$D$6:$D$44, "Direct", 'May Invoice Forecast'!$B$6:$B$44, ">=2020-01-01", 'May Invoice Forecast'!$B$6:$B$44, "<=2020-04-10")
Secondly, your date criteria will break if used on a DYM regional system when your computer uses an MDY regional date system. The same is true for the reverse. Use explicit dates instead of hard coding them into string literals or put the dates into cells and reference the cells.
=COUNTIFS('May Invoice Forecast'!$D$6:$D$44, "Direct", 'May Invoice Forecast'!$B$6:$B$44, ">="&DATE(2020, 1, 1), 'May Invoice Forecast'!$B$6:$B$44, "<="&DATE(2020, 4, 10))
Now to get the first name from 'May Invoice Forecast'!$A$6:$A$44 which lies within the date criteria, find the row number with AGGREGATE and pass that to INDEX.
=INDEX('May Invoice Forecast'!$A:$A, AGGREGATE(15, 7, ROW($6:$44)/(('May Invoice Forecast'!$D$6:$D$44="Direct")*('May Invoice Forecast'!$B$6:$B$44>=DATE(2020, 1, 1))*('May Invoice Forecast'!$B$6:$B$44<=DATE(2020, 4, 10))), ROW(1:1)))
Drag down for the second, third, etc matches.
If you want all the names in one cell then use TEXTJOIN to stitch them together in an array formula.
=TEXTJOIN(", ", TRUE, INDEX('May Invoice Forecast'!$A:$A, AGGREGATE(15, 7, ROW($6:$44)/(('May Invoice Forecast'!$D$6:$D$44="Direct")*('May Invoice Forecast'!$B$6:$B$44>=DATE(2020, 1, 1))*('May Invoice Forecast'!$B$6:$B$44<=DATE(2020, 4, 10))), ROW(1:1))))