For example, if I have several figures rendered over a black background, is it more efficient to call glClear(GL_COLOR_BUFFER_BIT) each frame, or render black triangles over artifacts from the past frame? Answers pertaining to other versions of OpenGL are also greatly appreciated.
Sometimes glClear can be a signal to the driver and/or GPU that you're done with the prior contents of the framebuffer, which it can then use to optimize internally.
Sometimes glClear needs to touch every pixel in the framebuffer whereas drawing a handful of primitives doesn't.
Sometimes you're overdrawing the entire color buffer each frame anyway so it might be worth skipping the clear.
Sometimes your GPU is a tile-based deferred architecture which may operate more efficiently if you clear every frame.
Sometimes your driver or GPU may have a fast path for glClear which may be the equivalent of just swapping a couple of pointers.
Sometimes other factors may apply.
In other words, the particular workload you're doing or the GL version you're targetting aren't the only factors that can affect this. In general terms, using the API the way it was designed to be used will be preferable to tricksy stuff, but that's not always the case and exceptions always exist.
Fortunately both options are utterly trivial to code, so you should code both and benchmark them on your own target platform(s).