Have you had a message cut off yet by the Stop command? If your message is long enough, it won't have time to complete until the stop command is issued to the device. HE doesn't know how long the message is to play, so it won't actually know when it's done. I rote a "rule" using WATO, when the device status goes back to Idle, that's when the stop command is issued. That way nothing is ever cut off. Seems to be working like a charm so far.
As far as the refresh, you shouldn't need to do that except to grab a level change. I have a rule running that refreshes all of my speakers every 15 mins or so. Otherwise their volume levels won't be accurately reflected in HE. But doing one in a custom command is kind of pointless, it happens after the speak command.
Also, your setVolume custom command is going to be send AFTER the speak command. Check out the order of operations. Custom commands are last. So the only way to get this to work is to make the speak also a custom, which you really don't have to, or to have it delayed by a few seconds by putting it in a separate action.