The issue is most likely the business rule trying to access the parent workflow to check the workflow status.  If you have a security setting on the parent workflow that the end user does not have access the rule will not work in this scenario.
 
Here is a generic workspace helper:
 
Namespace OneStream.BusinessRule.DashboardExtender._WATSCO_Workspace_Helper
Public Class MainClass
Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As DashboardExtenderArgs) As XFSelectionChangedTaskResult
Try
	Dim selectionChangedTaskResult As New XFSelectionChangedTaskResult()
	'Define Workflow Profile
	Dim wfProfile As String = BRApi.Workflow.Metadata.GetProfile(si, si.WorkflowClusterPk.ProfileKey).Name
	Dim scenario As String = ScenarioDimHelper.GetNameFromID(si, si.WorkflowClusterPk.ScenarioKey)
	Dim time As String = BRApi.Finance.Time.GetNameFromId(si, si.WorkflowClusterPk.TimeKey)
	If args.FunctionName.XFEqualsIgnoreCase("WorkflowComplete") Then
		'Used to complete a workspace
		Dim wfClusterPK As WorkflowUnitClusterPk = BRApi.Workflow.General.GetWorkflowUnitClusterPk(si, _
			wfProfile, scenario, time)
		BRApi.Workflow.Status.SetWorkflowStatus(si, _
			wfClusterPK, StepClassificationTypes.Workspace, WorkflowStatusTypes.Completed, _
			"Workspace Completed", "", "User clicked complete workflow", Guid.Empty)
		'Used to update the wfstatus automatically
		selectionChangedTaskResult.WorkflowWasChangedByBusinessRule = True
		selectionChangedTaskResult.IsOK = True
		selectionChangedTaskResult.ShowMessageBox = True
		Return selectionChangedTaskResult
	Else If args.FunctionName.XFEqualsIgnoreCase("WorkflowRevert") Then
		'Used to revert a workspace
		BRApi.Workflow.Status.SetWorkflowStatus(si, _
			si.WorkflowClusterPk, StepClassificationTypes.Workspace, WorkflowStatusTypes.InProcess, _
			"Workspace Reverted", "", "User clicked Revert workflow", Guid.Empty)
		selectionChangedTaskResult.WorkflowWasChangedByBusinessRule = True
		selectionChangedTaskResult.IsOK = True
		selectionChangedTaskResult.ShowMessageBox = True
		Return selectionChangedTaskResult
	End If
	Return Nothing
Catch ex As Exception
	Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
End Try
End Function
End Class
End Namespace