301 redirects are pretty permanent. And so if Google has crawled these 301s in the past it's tough to say when they will ever undo the 301 and recrawl the page.
You can change those urls to a canonical and this shouldn't harm your site at all. But just know that users who have visited these 301s, as well as Google, will still 301 redirect to the URL that was provided to them until their browser uncaches the 301.
It's fine to have duplicate content rel=canonical pages on your site. And this shouldn't penalize you at all. The only downside of this is that If you have 5 pages of duplicate content, with 4 of them pointing to the 1 canonical, Google may crawl all 5 of those pages before finding the correct one to index. This is a lot of extra crawl usage for its robot. And Googlebot likes to maximize how it spends it crawl allocations. Wasting some of the crawl allocations to duplicate pages could reduce the amount of pages Googlebot crawls on your site. Though if we are just talking about a handful of pages that are like this it's probably no big deal. If we're talking about thousands of pages then this could be an issue.
Ultimately, the undoing of the 301 is probably no big deal. But it will take some time for users and Google to be able to see the page again, maybe even forever as 301s are very permanent.