Looking into this further, MSDN says about SET statements in stored procedures
Stored procedures execute with the SET settings specified at execute time except
for SET ANSI_NULLS and SET QUOTED_IDENTIFIER. Stored procedures specifying SET
ANSI_NULLS or SET QUOTED_IDENTIFIER use the setting specified at stored procedure
creation time. If used inside a stored procedure, any SET setting is ignored.
So this explains why setting them in the stored procedure did nothing.
To get around this I set them before calling my stored procedure like so:
SET CONCAT_NULL_YIELDS_NULL, ANSI_PADDING, ANSI_WARNINGS ON; EXEC myProc ...