So I replace Number_of_posts with Number_of_likes in the second subquery (which technically is known as a derived table), I seem to get the expected result:
SELECT pn.First_name, isnull(ps.Number_of_posts, 0) AS Number_of_posts,
isnull(l.Number_of_likes, 0) AS Number_of_likes
FROM person pn
LEFT JOIN (SELECT person_id, COUNT(*) AS Number_of_posts
FROM posts
GROUP BY person_id) AS ps ON ps.person_id = pn.person_id
LEFT JOIN (SELECT person_id, COUNT(*) AS Number_of_posts
FROM likes
GROUP BY person_id) AS l ON l.person_id = pn.person_id