Tests inside runnableExamples are included in the documentation, so it's not really suitable for tests that aren't useful as examples. It was added recently so it's not used as much as it should be yet.
I think isMainModule is generally preferred for the stdlib. It's not followed religiously though and there are many stdlib modules that have tests inside tests/.
tests/ is mostly necessary for the compiler, since isMainModule becomes clunky/impossible if you want to test with multiple backends, tests for specific error message and so on.
All the tests are run by CI, but koch tests only runs tests inside tests/ (I think? maybe it runs isMainModule tests as well). The tests inside runnableExamples are executed as part of the doc gen, e.g nim doc <file> will run all runnableExamples blocks in <file>. This is performed by CI as well.