Since you have ECHO on, what happens if you put PAUSE at the end of the batch to halt it to give you time to copy the echoed sqlcmd line from the console and paste it into another console window, i.e. run it manually?
I note you have "narrowed down" the batch; that is all very well, and I understand the reason, but you'd be surprised how often the cause of a script failing is somewhere in what has been removed "for clarity". For example it makes me uneasy to see you using a double colon (a broken label) as a comment. It might have been OK in MS-DOS, but in Windows NT family batch scripts this is a frowned-on practice (for example it breaks a script if it is within parentheses such as in a multiline FOR or IF structure.) It is undocumented, unsupported and should be avoided.