I didn't even open a Salesforce ticket for this one, just observed that to avoid this Salesforce internal platform bug I can pass my model as JSON string
var action = component.get( "c.saveModel" );
action.setParam( "jsonModel", JSON.stringify( component.get("v.model") ) );
action.setCallback(this, function(response) {});
and to change my Apex Controller from
public static Model saveModel( Model m ) {
// perform some action with m
return m;
}
to
public static Model saveModel( String jsonModel ) {
Model m = (Model) JSON.deserialize( jsonModel, Model.class );
// perform some action with m
return m;
}