I have found that the task is the gradle "JavaExec" task.
And the 2nd case, javaexec is a Project method.
I began this quest to find a way to run Java programs using a different JVM than gradle itself is using (set from an environment variable or command line when running gradle).
I was able to get it to work in both cases:
ext {
    MyJvmVersion = 11
}
task SampleJavaExec1(type: JavaExec) {
    // Example task for using a custom JVM version with a JavaExec task
    javaLauncher = javaToolchains.launcherFor {
        languageVersion = JavaLanguageVersion.of(MyJvmVersion as int)
    }
    environment['JAVA_HOME'] = javaLauncher.get().metadata.installationPath.asFile.absolutePath
    classpath = files("MySimpleProgram.jar")
}
task SampleJavaExec2 {
    // Example task for using a custom JVM version with the javaexec method
    doLast {
        javaexec {
            environment['JAVA_HOME'] = "C:\\Program Files\\AdoptOpenJDK\\jdk-11.0.10.9-hotspot"
            executable = "C:\\Program Files\\AdoptOpenJDK\\jdk-11.0.10.9-hotspot\\bin\\java.exe"
            classpath = files("MySimpleProgram.jar")
        }
    }
}
In the 2nd case, javaexec() doesn't appear to have a "javaLauncher".
Instead of hardcoding a path, I also found that I can use javaLauncher to find it for me by adding this code inside the javaexec{} block:
javaLauncher = javaToolchains.launcherFor {
    languageVersion = JavaLanguageVersion.of(MyJvmVersion as int)
}
environment['JAVA_HOME'] = javaLauncher.get().metadata.installationPath.asFile.absolutePath
This should invoke the auto download JVM resolution as well, but I've not tested that part.