After looking at this further, if I remove owner reference for the stored procedures, I am able to execute all 28 lines at once:
Does NOT work:
GRANT EXECUTE ON dbo.storedproc1 TO dbrole
GRANT EXECUTE ON dbo.storedproc28 TO dbrole
GRANT EXECUTE ON storedproc1 TO dbrole
GRANT EXECUTE ON storedproc28 TO dbrole
I would have thought having owner reference is better, but apparently not.