There can be two things (that I can think of right now): the limits that FragInHell speaks of above, and the command line length. Of course, I can't confirm anything since I can't see the source code of the application.
In the first case, it would be a sign of really really poor programming practices: you don't need to have opened the 3500 files simultaneously to copy them, that doesn't make any sense and is an utterly stupid waste of resources. I really don't think that anyone with a couple of neurons can program like that.
In the second case, it's a matter of passing the correct amount of parameters. However, depending on the application it can also be a sign of bad programming practices. If it's a command line application, you should be passing a correct amount of parameters, that doesn't exceed the max length of the parameter list. xargs can be used for that, or it could be done with a loop. In the case of a GUI frontend, then the problem is probably in the GUI, which is interfacing with mv or whatever command like tools to move the files, and pass too much arguments to them.
In any case, and without more info on what program are you using and its true nature, that's all I can say.