Thanks to both..
The sproc gets fired up to 18 times, but by different tasks, which is why I wanted to use a package level variable.
I didn't want to use the container start time as I would have to configure the variable 18 times or use in-line conversions in the expression which makes it difficult to maintain.
In the end, I have added an Execute SQL task immediately after the file watcher which does a
SELECT cast(year(getdate())as nvarchar(4)) + right('0' + cast(month(getdate()) as nvarchar(2) ),2) + right('0' + cast(day(getdate()) as nvarchar(2)),2) as 'FormatDate'
and saves the recordset value to the variable. This way I know it gets re-evaluated each time the file watcher fires.