.NET Core 2.x runtime will run .NET Core apps compiled against older SDK versions such as 1.0 or 1.1, yes that is correct.
Technically, Mono should always run .NET Core apps, given the Mono runtime is new enough. What I mean by this, is I wouldn’t expect a Mono runtime that’s 2 years old to necessarily run some app built against a brand new .NET Core SDK version.
Most .NET devs will start targeting what are called .NET Standard libraries. It’s basically an API surface/contract to compile against leaving the runtime up to implementation of it. Mono and .NET Core will both support code targeting .NET Standard Library, so apps compiled against it should run fine on both runtimes.
Mono is a bigger footprint to install, but will probably get you the best C# compatibility today and will be fine going forward (I believe current stable mono version already implements .NET Standard 2.0 which is coming later this year).
.NET Core would make some developers’ lives a bit harder in the short term but would be totally usable instead of mono. It has a smaller footprint, but it does have a hard dependency requirement to do with OpenSSL.
If I were making the decision, I would probably prefer .NET Core as it’s a smaller footprint but it seems like you might not be able to work out the OpenSSL requirements with your image for it, in which case I’d give Mono some serious consideration.