So yes, you are asking all the right questions :-)
And your choice will really depend on things like performance, and indeed duplication in case of more complex queries.
But honestly, i think knowing the count in the database of some items with a given status, is a completely different requirement than bringing back a list to show to the user. What if you would like to start adding search or filter options for the user on the list, at that point, you wouldn't be able to do some after the fact filters on the aggregate result to do your counting either, could you.
I personally would probably separate these needs into separate queries / aggregates. And in your case, if you want to count both completed and open, I would imagine one aggregate with a group by on status, this will give you all your counts, and a separate aggregate to bring back the 50 records to show.
Dorine