Your trigger is (correctly) firing after update, so that's good. However, after the update is finished, the Lead is no longer a Lead, so its activities are all set with WhoId = Lead.ConvertedContactId.
The solution is to do a query of the Lead itself, being sure to get ConvertedContactId, ConvertedAccountId, and ConvertedOpportunityId. Then we'll work with those values. But this is where things get fishy:
Scenario 1: Convert Lead and don't create an Opportunity
You would check if ConvertedOpportunityId == null, and then you would find all those activities. But...
Scenario 1.1: Convert Lead, no Opportunity, didn't merge with an existing Contact
Here, we have no problems taking all Tasks where WhoId = :l.ConvertedContactId and setting them all to completed.
Scenario 1.1: Convert Lead, no Opportunity, DID merge with an existing Contact
There is no way of knowing off-the-bat if you did this, unless you do a second query on Contact, searching for CreatedDate, and comparing that to LastModifiedDate on that Contact. If the two do not match (and I don't know if they could be even slightly different, so you may need to check on just date and hour being the same) then you merged the two and you should filter your Task query to only those tasks where the LastModifiedDate is the same as the Contact LastModifiedDate... BUT...
This is not foolproof, and I'm sure you can think of ways that this could fall apart, such as having converted a Lead to merge with a very active Contact record. And for THIS reason, I think that this is a dangerous thing you're attempting unless you can make some proper filters on your Task query. Even then, it sounds dangerous.
Scenario 2: Convert Lead and do create an Opportunity
This one is nice and fun: You created an Opportunity, so you can find it by checking the WhatId (the Opportunity) and the WhoId (the Contact). The Tasks you get here are only the ones that were on the Lead, so you're safe, whether or not you merged the Lead with an existing Contact.
I think those are the only options.
However, marking all open Tasks as closed when converting a lead just sounds fishy from a business process perspective. Part of the point of a CRM is to use one record for a person and to follow that person through the whole process of marketing, sales, support, retention, etc. This practice of closing "all the tasks" goes against that, so it would be good to filter your query very carefully, or you are going to have management and marketing complaining loudly.