How to grant permission to execute stored procedure in master database from another database
What am I missing?


The DOMAIN\user login should be able to run  dbo.sp_HelloWorld with it's corresponding user in the MyDB context. 

The EXECUTE AS USER command is the reason for the error being returned.

Execute as user documentation


  Specifies the context to be impersonated is a user in the current
  database. The scope of impersonation is restricted to the current
  database. A context switch to a database user does not inherit the
  server-level permissions of that user.


Important part: the scope of impersonation is restricted to the current database.

Which is why the permissions from other databases such as master are not applied when using EXECUTE AS USER.

You need to use EXECUTE AS LOGIN  if you want the correct login / user mapping

Execute as login documentation


  Specifies the execution context to be impersonated is a login. The
  scope of impersonation is at the server level.


USE MyDB
GO
EXECUTE AS LOGIN ='DOMAIN\user'
EXEC dbo.sp_HelloWorld
REVERT


Result

Hello World!