As far as I can see from your code, it does seem to be the problem you suspect.
You probably know, but to recap.
It's the classic problem:
Copper instructions need to be in CHIP RAM. If you have both CHIP and FAST ram in the the system and there is room in FAST RAM to load the program, it will be loaded there. Since you have not explicitly copied the copper list into CHIP RAM, it will not be able to be read by the copper. When you execute the program, the copper attempts to read instructions from a random area in CHIP, giving you garbage, sometimes even spectacular fireworks if you're lucky ;-)
As mentioned earlier, the other option is to flag the segment containing your COPPER list to be loaded into CHIP RAM. See your assembler/linker docs for details.
To prove if this is the problem, run NoFastMem and then see if the program works. If it does, that is your problem.