I think I see the oversight in the solution. The query returns results for only those employees that have both complaints and accidents, because the two matches will not return a result if there is not a pattern to match.
To fix this, we need to use optional matches. The following code should work:
MATCH (e:Employee)
OPTIONAL MATCH (e)-[r:Received]-(c:ComplaintID)
WITH e, count(c) as numOfComplaints
OPTIONAL MATCH (e)-[i:Involved_In]-(a:AccidentID)
WITH e, numOfComplaints, count(a) as numOfAccidents
WHERE numOfComplaints > 0 OR numOfAccidents > 0
RETURN e, numOfComplaints, numOfAccidents