The short answer to the question "Is there a way to obtain the RowCount and the data, write the header, then write the body, without calling the stored procedure twice?" is, alas, "No." At least, not in a single data flow.
However, it is possible to eliminate the second call to the stored procedure. Add a Row Count transformation to the original data flow and save the count to an appropriately named variable. Then add a Script Component to the package flow to prepend the desired header row to the text file.