If you use sp_helptext to view the source for your stored procedure, I'll bet you see the GRANT statement at the bottom. The definition of a stored procedure ends at the end of the batch. Try sending the GRANT statement through on another call:
SQLEXEC(h, "CREATE PROCEDURE...")
SQLEXEC(h, "GRANT EXECUTE...")
-Mike