It's throwing an error because the save is canceled so it can't set Me.Dirty = False. You need to catch and handle the error in your button click method. Also, I don't think the Exit Sub line is necessary in the BeforeUpdate method.
Code:
Private Sub btnSubmitAndClose_Click()
On Error GoTo ErrHandler
Dim db As DAO.Database
'********************* WHY NOT START OFF THE SUB WITH SOME ERROR CHECKING?
If IsNull(Me!txtProjectNumber) Then Err.Raise 1001, , "Project Number is blank"
bSave = True '<------------------ WHAT'S THIS? IT'S NOT USED IN THIS ROUTINE OR DECLARED
If Me.Dirty Then
Me.Dirty = False ' Save the changes
End If
'*********************CHANGED EXECUTION OF SQL FROM DoCmd.RunSQL TO DAO TO GET RID OF HANDLING WARNING FLAGS
'DoCmd.SetWarnings False
'DoCmd.OpenQuery "qryAppendMultipleReq" 'Append rows from Multiple Requests to Requests table
'DoCmd.RunSQL "Update tblRequests Set tblRequests.[cboEstimateStatus] = 'Pending Request' where tblRequests.[txtProjectNumber] = Forms!frmRequests!txtProjectNumber"
'DoCmd.RunSQL "Delete * From tblMultipleRequests2"
Set db = CurrentDb
db.Execute "qryAppendMultipleReq", dbFailOnError
db.Execute "Update tblRequests Set tblRequests.[cboEstimateStatus] = 'Pending Request' where tblRequests.[txtProjectNumber] = " & Me!txtProjectNumber, dbFailOnError
db.Execute "Delete * From tblMultipleRequests2", dbFailOnError
DoCmd.Close acForm, "frmRequests"
DoCmd.OpenForm "MainMenu"
ExitHandler:
'DoCmd.SetWarnings True
Set db = Nothing
Exit Sub
ErrHandler:
MsgBox Err.Description, , "Error #" & Err.Number
Resume ExitHandler
End Sub