Downside: a distribution can only be updated and branched as a whole, disallowing the independent package by package modifications or package based branches.
not necessarily. with subtree, one has the option to pull/push to the whole tree, and/or to the components via "subtree pull/push".
A "large" single repository with the 300+ packages has certainly also advantages, since it is setup-wise quite simple, has no problems with cross-package commits, etc., ..., id does not conflict with site-specific workflows, etc., but requires that all these packages are in the same branch, have the same tags, etc. This is not compatible with e.g. the per-package (actually per-file) tagging of cvs, where different packages can be in different branches, and where within the branch, tags (like openacs-5-8-compat) can be used for flagging the state of a package such as releases or being part of different distributions (acs-core, dotlrn, etc.).