I don't have access to a 610 at the moment but I decoded your fit files and had a look.
File_id shouldn't contain both file number and time_created fields. I think time_created is the appropriate one in this instance. Try dropping the number field from both your schedule.file_id & workout.file_id messages.
Your time_created fields also seem strange. Schedule.file_id.time_created seems ok (717678744 ~27/09/2012), but Schedule.schedule.time_created is 373927518 and workout.file_id.time_created is 282267369, both a really long time ago. I guess the actual values don’t matter but I think part of your problem is they mismatch.
The schedule message in the schedule file references the file_id message in the desired workout file (see figure 14-2 in the FIT File Types document found in the FIT SDK archive). Both schedule.schedule and workout.file_id should contain matching values for the following 4 fields: manufacturer, product, serial_number and time_created.
I think the reason the 610 is crashing is because it can’t find a workout file with a file_id message that matches the values specified in your schedule message. The time_created values disagree and there is no serial_number field at all. Try making your schedule message match the file_id message in your workout file (manufacturer, product, serial_number and time_created).
Although you define and redefine your workout_step messages somewhat differently than the GTC file, the steps seem equivalent to me. I think this section is fine.
HTH