For cycling, it is using MET tables not HR, so you are comparing apples and oranges with a chest strap. MET tables are scientifically tabulated tables of energy expenditure for a specific activity at varying paces. It uses the MET factor along with your personal stats to come up with an energy expenditure number. Depending on where you fall within the average used to compile the tables it may or may not match you exactly. and since it is not looking at HR it has no way of knowing if your level of effort was beyond what is typical at a given pace, which is what the METs are based on. Ultimately, any devices calorie number is just a guess, regardless of method. HR based is only accurate within a relatively small range of HRs at submaximal efforts, while METs based does not consider elevation change and HR. You just should pick a method you agree with and stick to it. I personally use the average HR data and put it into an Excel spreadsheet with the standard HR formula, this way I am not relying on the watch to calculate calories and will be consistent regardless of device as I am just using the raw HR data. The TomTom in Freestyle mode (the only one that uses HR) is right on these numbers (more so than my Suunto which also uses the same data but applies an algorithm trying to estimate R-R values).
Calories burned will depend on the activity mode used. In running, cycling and swimming modes the watch is not using your HR to calculate caloric burn; it is using MET tables, which are tables of energy expenditure at various paces. They did it this way to enable users who are not using a HR monitor to get a caloric estimate (otherwise they would get a zero reading). Since MET tables are based on pace and distance, cycling of different types (mountain versus road) will produce different results, regardless of HR as the paces are different. I find the accuracy of calories in this mode is fine for me (not nearly as good as an HR based calculation but generally in the ballpark) but it all depends where you fall in the averages used to create the MET values, there will always be outliers for whom they are not as accurate.
In gym and freestyle mode, it is using your HR to calculate calories applying a standard HR based calculation taking into account weight, age and gender. How accurate the calories are depends on how accurate the HR readings are, and how well the watch is collecting them. If you want to check it you can take you average HR and put it in an online calculator or Excel spreadsheet to calculate an accurate calorie count. In my experience the watch calories match up almost exactly to any site using an HR based calorie calculation.
Since every device brand has their own proprietary algorithms for counting calories, some using METs, some HR, some R-R variance, they will all come up with different numbers. Ultimately, any devices calorie number is just a guess, regardless of method, so it is more important to make sure you are consistently keeping your HR to the right level to get the workout you want.
There is only one cycle mode because the data required to calculate energy expenditure is only readily available for that mode. Calorie calculations use METs tables which are scientifically calculated tables of energy expenditure at various paces. They are only available for a limited number of sports and are only valid within that sport due to the reliance on pace (your pace in road and MTB cycling will be very different even at the same intensity). There are no METs figures for MTB so there would be no way to calculate energy expenditure, unless you used HR for it, but not everyone has HR enabled watches or uses a strap. To those that do not they would get a result of 0. I would not expect this to change as the data has not changed and since TT has left the wearables market and is no longer producing new devices they have little incentive to expand this. It is what it is and we are going to have to live with it or get a different brand. You can use Freestyle for your MTB which will break it out into a separate category and not muddy your averages.
In treadmill mode the watch is not using your HR to calculate caloric burn; it is using MET tables, which are tables of energy expenditure at various paces. They did it this way to enable users who are not using a HR monitor to get a caloric estimate (otherwise they would get a zero reading). Since the watch is also likely short on distance (and therefore pace) since the calibration is not very good, it is going to short calories as well. And unfortunately, while you can calibrate at the end to correct the distance it does not go back and recalculate the calories. This has been a common complaint for the last 2+ years but so far nothing has changed. The reasonable thing would be to have it use HR when it detects a HR reading and METs when it doesn't but so far there has been no change to the logic in the watch. The only modes that use HR for calories is Freestyle and Gym.
There is no real fix, but as a workaround you can take the average HR it counts and put this in an online calculator or Excel spreadsheet along with your personal stats to get the actual calories burned. Unfortunately, if you only use My Sports you cannot edit the activity to update the calories burned in the activity record (another request that has not come to fruition yet). If you use another platform that allows editing activities you can simply put the correct calories in.
This brings up one more point. The Cardio uses an optical sensor, while the straps are based on electrical impedance. Most watches using strap data are not using the basic HR formula; they are extrapolating R-R values and trying to come up with VO2 Max to calculate energy expenditure. This is not possible with optical based sensors as they are counting heart beats directly through pulse (straps are counting beats indirectly through electrical signals in the chest cavity).