My suspicion is that running the script in the command prompt as well as running in system() is able to leverage the file association that you have configured in Windows -- meaning all .pl files are to be "opened" with perl.exe. And that Proc::Background is not pickup (or using) that file association.
Indeed, looking at Proc::Background's method section of its documentation seems to address the very issue that you are hitting. Basically, the new method is expecting the name (preferably the full path) of an executable to run. In your case, the executable that you are trying to run is perl.exe. However, based on how you are calling the new method, Proc::Background is trying to find an executable named "bg_script.pl.exe", which it can't find.