Ignoring Null (optional) Variables in Stored Procedure
If you set the value of a given parameter to it's default value (when it has one), you'd get the same functional equivalent as omitting it.  Therefore, I'd suggest doing something like the following:

EXEC dowork 
    @param1 = ISNULL(@param1, SELECT default_value FROM sys.parameters p WHERE object_Id = OBJECT_ID('dowork') AND name = '@param1' AND has_default_value = 1),
    @param2 = ISNULL(@param2, SELECT default_value FROM sys.parameters p WHERE object_Id = OBJECT_ID('dowork') AND name = '@param2' AND has_default_value = 1),
    ...@param30 = ISNULL(@param30, SELECT default_value FROM sys.parameters p WHERE object_Id = OBJECT_ID('dowork') AND name = '@param30' AND has_default_value = 1)


The only flaw being values that do not have a default value, which will result in passing a NULL vs causing the error that would occur when omitted.  If that is a concern in your particular case, I would do some checking before hand and throw an error.

The only other alternative I could suggest would be dynamic SQL.