Why can't sa be impersonated in a procedure?
Please, remove the WITH EXECUTE AS OWNER and it should work
--Create the procedure with the impersonation
USE master;
GO

CREATE PROCEDURE impersonate_procedure
--WITH EXECUTE AS OWNER
AS
BEGIN

EXECUTE AS LOGIN = 'sa';
CREATE LOGIN appname_owner WITH PASSWORD = 'randomlygeneratedpassword';

END;
GO