A razão era bem simples. Eu estava chamando
EnsureCreated
em Startup.cs
que estava entrando em conflito com as migrações por funcionar de maneira diferente. Felizmente, os proprietários do EF Core deixaram isso claro para mim no GitHub. Então, para resumir - se você quiser usar migrações, não poderá usar o EnsureCreated.