There's also the question of past convictions. Should people who were convicted of drug offences be pardoned? Personally, I don't think they did. If you broke the laws as they stand, you are guilty and pay the price decided, regardless if they laws later change. If you're given a speeding ticket and the speed limit it later increased then unlucky - that was the limit at the time. If the alcohol limit is lowered, should people who previously passed a higher limit be given convictions in hindsight?
I'm not really firmly made up one way or the other on this, but I don't think it's quite as simple as "it was the law at the time so you don't get a pass once it's changed." I think in this case it's a little bit fuzzy. There's a spectrum to be seen here and I think we ought to consider where we are along this spectrum before making blanket decisions.
Going a bit in reverse order - I think we can dismiss out of hand your comparison to ex-post-facto enforcement of laws. If you truly can't see the distinction between taking away someone's freedom because you decided after the fact what they did was wrong vs granting someone freedom because you decided after the fact what they did wasn't so bad, then maybe that warrants further conversation, but I hope it's a rather obvious difference - even before getting into a conversation about what sorts of powers you want to give the government (ex-post-facto laws being, in my mind, quite dangerous vs amnesty being a very good thing in certain cases).
Your analogy to a speeding ticket is an interesting one, and I think it actually illustrates quite well the fuzziness of which I spoke. Unfortunately I can't find a reference as it was years ago, but I do recall a particular case in which the a speeding ticket was thrown out because the speed limit was found to be unjust/illegal. Apparently there was some law in the jurisdiction that speed limits on certain roads were to be set based on the results of an independent study to determine what was safe, and in one case the speed limits were set significantly lower than that. The speed limits were later raised and speeding tickets that were challenged on that basis were thrown out. Obviously this is a very special case, and it has limited applicability to other law changes, but it illustrates the point that I'm getting to.
The question about what to do with people who were arrested/fined/etc on the basis of a law that is subsequently changed, I think, hinges on why the law was later changed. If, in the above example, the speed limit was changed not because the road had always been safe to drive on at the higher speed but because the road was resurfaced and improved signage was installed in order to improve high-speed safety, you'd likely come to different results (or, at the very least, the same result with differing strength of conviction). A more extreme example along the same spectrum - where I live currently there have historically been anti-sodomy laws that were used to arrest homosexual men. These laws were later overturned and the people convicted under them exonerated. This is a little different again because the laws were overturned by the judicial branch, but in my view it is more important the reason why they were overturned than by whom - they were found to be unjust laws. If a legislature decides that a law is unjust before the judiciary gets around to doing so, should we not exonerate those imprisoned on the basis of the unjust law?
In the case of the legalization of marijuana, it could be argued that its prohibition is quite different from a speed limit. Speed limits are in place, ostensibly, to further the interests of public safety. The prohibition of marijuana is in place....I don't know why it's in place, really - because drugs are bad? No, that doesn't work...there's tons of legal drugs out there, alcohol for one being by most/all measures more dangerous than marijuana. Saying its illegal "because illegal drugs are bad" is circular. It's not any more a threat to public safety than alcohol. As far as I can tell marijuana was initially made illegal due to puritanical religious reasoning and to satisfy corporate interests of the day. If I'm not missing some other justification, I think this makes it an unjust law. If its repeal was on the basis of this reasoning, I think it makes sense to enact some kind of amnesty for non-violent drug offenders. Perhaps, given the nature of the drug market and the unsavory elements at work, full amnesty might be inappropriate, but maybe reduced sentences or probation or something like that would be.
That's all before looking at this from a practical standpoint. Canada is, from what I understand, far better off than the US on this point, but coming at it as someone in the US - if we could get non-violent drug offenders out of prison in a controlled and deliberate manner and end prohibition (especially on marijuana) it would likely be a very large net positive. I'm not sure what the situation in Canada is, but at the very least it seems like it'd be worthwhile to free any convicted of non-violent marijuana related crimes if only so you can stop paying to house them.
Anyway, as I said, I haven't really fully made up my mind, at least on the general moral argument. As you say, they did violate the law as it stood at the time, and in many cases it's still a good thing to carry on the punishment of those that break the law even if the law they broke is later changed. My point is that it can't be covered with a blanket statement, and there are other considerations that should be taken onboard. As a practical matter, I think, at the very least, eliminating the need to take on further expense in punishing people that committed a victimless crime is generally a good idea. There's lots of ways that individual cases would likely become complicated though - for example: an otherwise non-violent offender that got additional charges for being less than enthusiastic to be arrested for possession of marijuana. Such a person is definitely stupid, but depending on the circumstances I'm not sure if I'd be willing to say that they need continued status as a criminal. Another situation - people that were arrested on marijuana charges and were caught while driving. Typically, though, in those cases (at least here) I think people get hit with multiple charges (possession as well as DUI - driving under the influence can include more than alcohol) so perhaps simply dropping the charges that would no longer apply under the new law would be sufficient.
Sheesh I'm long-winded. TL;DR - I don't think the idea of extending amnesty to those who broke laws that have since been repealed can be objected to as a rule, in my mind the best approach is a case-by-case consideration of law, why it was repealed, and perhaps of individual cases of its application.
Oh and congrats to America's hat on beating us to having some common sense around prohibition!