In a wheel, there are basically two kinds of metadata: the kind that follow directly from the circumstances of the build (RECORD, which lists sizes and hashes for included files, and WHEEL, which says what environments the wheel is for and what tool built it), and then the kind that has to be specified by the developer. The latter is in METADATA. But the thing is, for most projects this data can be completely static, in which case the wheel METADATA is just a copy of the corresponding sdist PKG-INFO.
Build backends support a variety of dynamic metadata, but there are two places where that could be calculated: in the sdist (using information from pyproject.toml plus the developer's source tree to produce PKG-INFO) and when building a wheel from that sdist. The latter cases mean that the developer is asserting that code needs to run on the end user's machine in order to get correct metadata. This is… usually questionable at best, and IMO impolite without a damned good reason.