You are right Ken.
When internal table (say ITAB) is declared with header line, Then
CLEAR ITAB. would remove data ONLY from the HEADER line.
CLEAR ITAB[]. would remove data from the table LINES.
Usually, CLEAR is used to remove data from variables and work areas.
REFRESH, FREE is used for internal tables. And you have rightly pointed out the difference.
Cheers Raju.