This response assumes you are using a Standard Agent (pre-Infinity) or Queue Processor (Infinity). Can you clarify the background processing technique you are using?
If your intent is that you set Param.Calendar before the background task is enqueued, and Param.Calendar be available when the background task is running, I doubt the parameter page is persisted and restored in the background processing task. I note though you have other Param's in your function call - are they getting through?
The preferred way to make state available to the background processing task is to ensure the values the task needs are on the step page of the Queue-For-Agent / Queue-For-Processing method. A Standard Agent will load the latest version of this instance from the database as the Primary Page for its execution; a Queue Processor has a few more options, but the premise is the same ... by setting the Calendar you want to a property on the item queued for background processing, you can reference it from 'Primary' in the background processing Activity.
I recommend using a Log-Message step in both:
The Activity that queues the task - to show that you've calculated the correct Calendar; and
The background processing Activity - to show that you've retrieved the desired Calendar value.
Note that in a multi-node environment your background task may run on a different node, so check logs across all nodes. Use InfoForced level to ensure it is output now, but change this back to Debug before you go to Production.