Hey there Diesel
I have not much familiarity with the BMW but am quite familiar with CAN bus systems as we've developed 'nodes' for various projects at work using CAN. A couple of things come to mind.
1. The load resistor in parallel with the relay makes sense if you have disconnected the stock horn, otherwise should not make that much difference.
2. Clamping diodes on both your relays make sense but you might want to check as some automotive relays already have these diodes built-in. Normally can be seen on the 'schematic' printed on the relay.
3. The Stebel (at 18A) is probably capable of huge inductive spikes in and by itself. The longer the wiring or more circuitous (no pun) the path between the battery and horn (via relays, and fuse panels) give more opportunity for any voltage spike to be inductively coupled into nearby wiring (including the CAN data lines). We've had inductive loads cause all kinds of havoc on circuits that are not physically attached/connected.
Here're a couple of suggestions:
1. Ensure that you have 'matched' the supply and return lines that feed the load to the horn. i.e. you should be able to trace the outbound and return route with as few skips/junctions along the way. Using the chassis to ground the load 'on the way back' is a no-no when dealing with high current, inductive loads. If possible I'd isolate the ground lead for the horn (straight shot to the battery) from the ground leads used for the relay coil(s).
2. When routing the high current load lines to the horn (via the relay) try to avoid bundling it in parallel with the CAN lines while keeping the high-current leads as short as possible.
Hopefully the above should do the trick.
If not, you might consider one of two things
a) placing a clamping diode at the 'horn connector' i.e. closest to the source of the transient.
b) Use a TVS (transient voltage suppresor) which will curb the positive swings as well. You would use a TVS in parallel with a 'plain' diode.
Here's one that should work
That being said, if the wiring (both positive and return) between the battery and the horn are 'clean' and balanced, you should not have to resort to a TVS.
CAN is pretty tolerant of all sorts of noise but I've witnessed a 30A inductive load generate 400V spikes and even inductively coupled to the datalines, this can wreak some havoc.
Here's a quickie (!) test, if you feed the horn relay directly with two leads from the battery (and bypass your fuse panel and CAN powered relay) and it helps, it most likely points to noise coming from the wiring and the above suggestions should help.
The above assumes that firing the horn generates some sort of voltage spike/transient capable of restting the system. It might be worthwhile to check the state of charge of the battery or terminal connections as a weak battery (from loads of testing) can also amplify the symptoms or trigger some other low-voltage related circuitry.
Hope this helps