Sorry to hear about your crash and rebuild. I’ll try to point out some things I see in your setup.
I would suggest setting this param to 0.2 for a helicopter. The default of 0.5 applies to multi-rotor aircraft and will make the collective cycle rapidly on most heli’s
The following params here are mostly the defaults. For now I would suggest going to the wiki under trad heli tuning and adjust these to the suggested values for first flight attempt and tuning. It looks like the only change you have made, possibly, to the defaults is turn ATC_ANG_RLL_P from 4.5 down to 3.5. These params could’ve had something to do with your problem. The I-term and IMAX params are a bit high in the defaults so I-term could’ve built up to the max level and didn’t leak off fast enough and caused the heli to want to tip on takeoff.
In the following params here I see the servo directions corresponds with what I see in your flash log for servo signal on RC out. This would make sense, since you said the swash tips in the proper direction with the hand roll/pitch test. So if the servos are not moving in the correct direction with your sticks, that problem is setup in the radio, and not with the ArduPilot software or configurations.
The other problem I see, and maybe you have this heli up with very little negative collective pitch, is that your servo trims vary quite a bit. And at max collective you are barely over servo center travel. At min collective you are too close to the servo limit and will likely have no cyclic control at negative collective because you will run out of servo travel.
Do your mechanical setup so that at H_COL_MID you will be as close to 1500 as possible with the servo horns at 90 deg to the swash links. If you are using different throws on the servos you will have a problem with introducing cyclic into your collective, as you advance collective pitch. The swashplate must remain level at full collective travel.
The other problem is that the params that are bold faced below are reversed. If this is a normal head with the elevator servo in the rear, then servo #1 is the left front servo at -60 deg. Servo #2 is the right front at +60 degrees. And servo #3 is at 180 deg. This is different from the way your heli setup manual, or radio setup might be for a helicopter
Now, let’s move on to your collective curve. I don’t know how this even worked. The range for these params is 0 (max negative collective) to 1000 (max positive collective) in Stabilize flight mode. What these params do is allow you set a custom collective curve for Stabilize flight mode where you can limit the max and min collective that is available to the flight controller to make the chopper easier to fly in Stabilize. The IM_STAB_COL_2 and IM_STAB_COL_3 correspond to about 40% and 60% collective on the stick respectively, so you can flatten your collective curve for hover to make collective management easier in Stabilize.
The final thing is that I see you are using throttle mode 1:
I don’t think is a problem as long as you are not using a helicopter setup menu in your radio to send a throttle curve to the ESC. It is important to not use a heli setup in your radio because then you may get some other mixes in there that will cause your servos to do weird things when moving the sticks. With Pixhawk/Ardu you just need the same basic thing that airplanes use - Channel 1 is aileron, Channel 2 is elevator, Channel 3 is collective (throttle with an airplane), Channel 4 is rudder. And as you move your sticks for each channel one at a time, no other channel should change pwm value. If it does, then you have a mix in there that you need to get rid of.
I think your crash was the result of a combination of things - having servo #1 and #2 reversed. Having too much I gain and IMAX to start with for your first test flight. Mechanical setup with possible servo binding and/or introducing cyclic pitch with increase in collective pitch due to unequal servo throw as collective advances. And I still don’t know how you managed to control collective at all in Stabilize. Unless the code rejects invalid values there and defaults to a straight collective curve?