Why does the first category returned get echoed twice?

Because you are echoing the $childcat->cat_name each time a post passes the validation.

Remember that you are inside the loop and for each post that matches your condition your are echoing. You seem to be wanting to print a list of categories that are a child of 19 but I don’t see why you’d go over each post to do that.

I would give you a solution but I’m not sure where you are going with this, if you share what you are trying to accomplish I will update my answer