Okay, so I have found the culprit for this problem.
When running the stress load, it was not gradual - all of the connections were opened at once flooding the server.
MySQL has a default back_log
of 50 - which is the number of outstanding connections MySQL can have before processing them. We were hitting this limit when flooding the server and further connections over the 50 threshold were refused.
To fix this, we edited my.cnf with the following line, increasing the listen backlog to a reasonable 128 which works for our setup:
back_log = 128
Please be aware that the maximum value you can enter here is dependant on your OS and the limits set within your OS. MySQL can have a maximum listen backlog of 65535 however your OS may have a figure less than that.
With the new back_log of 128 our problem is fixed and we are no longer getting Connection refused
error message under load.