I'm unclear if the "Filter Array" action actually filters and edits the array output of "Get Items", or if the Body is it's own filtered output and the input array is unchanged.
Hi @ rich106,
The error message which your provided told that there are some item's "Start Date" column is null, the expression "formatDateTime()" couldn't process the null value.
Please make sure all columns which you would use with expression "formatDateTime()" wouldn't be null.
The "Filter Array" action actually filters( not edits)the array output of "Get Items", the Body is it's own filtered output and the input array is unchanged.
If you could make sure the "End Date","Join Date" column of all items is not null, you could refer to screenshot below to create the flow:

You could fill in expression in the Filter Array as below:
@and(equals(item()?['Title'], 'Chief of Staff'),and(greaterOrEquals(formatDateTime(item()?['End_x0020_Date'], 'yyyy-MM-dd'), formatDateTime(utcNow(), 'yyyy-MM-dd')),lessOrEquals(formatDateTime(item()?['Join_x0020_Date'], 'yyyy-MM-dd'), formatDateTime(utcNow(), 'yyyy-MM-dd'))))
The expression in the "Assign to" field of "Start an approval" as below:
The flow would run successfully as below:
If there would be some items' "End Date" or"Join Date" column are null,you could refer to screenshot below to create the flow:

You could fill in expression in the Filter Array 2 as below:
@and(not(empty(item()?['End_x0020_Date'])),not(empty(item()?['Join_x0020_Date'])))
You could fill in expression in the Filter Array as below:
@and(equals(item()?['Title'], 'Chief of Staff'),and(greaterOrEquals(formatDateTime(item()?['End_x0020_Date'], 'yyyy-MM-dd'), formatDateTime(utcNow(), 'yyyy-MM-dd')),lessOrEquals(formatDateTime(item()?['Join_x0020_Date'], 'yyyy-MM-dd'), formatDateTime(utcNow(), 'yyyy-MM-dd'))))
The expression in the "Assign to" field of "Start an approval" as below:
The flow would run successfully as below:

Regards,
Alice Zhang