Several hours or the night before mash all the ingredients for the charmoula to make a paste. Rinse off fish and pat dry with a paper towel. Rub half (reserve other half for future use) of the charmoula on both sides of the fish fillets, then place in a casserole dish, cover and marinate one hour in the refrigerator.
Combine carrots, tomatoes, pepper, potatoes, preserved lemon, stock, and cayenne pepper in a tagine or large pot. Bring just to a boil, then cover and simmer 15 minutes over medium heat. Add zucchini and cook another 5 minutes. Slice fish into large pieces and add to the pot along with marinade and cook 5 minutes, or just until fish is opaque.
Drain the liquids from the tagine into a small saucepan. Bring to a boil over medium high heat and boil until reduced by half. Pour reduced sace back over fish and vegetables. At this point if you like you can place tagine under a broiler to make the top a little crispy just before you serve it.