Can't tell you why this is happening but try this.
Download Psexec from the internet (google it).
Copy psexec.exe to the root (c:\) directory of the computer your are running your batch on.
Edit your batch file and put a pause after every line. Now copy the batch file to the root directory of the computer you are working on.
Get a command prompt and change to c:\ type in the command prompt psexec -i -s cmd.exe (this runs under sytem account)
When this 2nd command box pops up change to c:\ then type in the name of the batch file.
If the line is successful you'll get a pause, hit space bar and continue until the bad line will give you a error message.
Copy files to "C:\ProgramData\Microsoft\Windows\Start Menu" (for Windows 7), this makes visible to each user of that PC the link. If you want to copy link files only to specified users account you should modify the MSI with Orca (or other software like it).
Agreed. Though I would use the variable "%allusersprofile%\Microsoft\Windows\Start Menu". This will help,too, to account for WinXP clients as well as Win7/8.
Your current script using %userprofile% will only add it for the active profile! which in this deployment scenario is Local System.