In CSS, an element can have one of two "primary" colors: a foreground color, specified by the color
property, and a background color, specified by the background-color
property. Lots of other properties accept a color, but having black as the initial color value would be very arbitrary, so instead properties that accept a color value take on the computed foreground color by default.
Of course, this can result in a black border if the foreground color is black, but only then. And the text color is only black to start with because the default UA stylesheets make it so; CSS does not state anywhere that the initial value should be black, but that it is UA-dependent (CSS1, CSS2.1, CSS Color 3). For example, a UA in high-contrast mode or inverted-colors mode could specify the default color scheme to be white on black, or a different color combination entirely:

This behavior has been around since CSS1. The currentColor
value, introduced in CSS Color 3 based on the equivalent SVG keyword, is now listed as the initial value of the respective properties in the respective CSS3 modules:
Using attr()
with a color value also falls back to currentColor
when a value cannot be found. See CSS Values 3.
Prior to CSS3 there was no way to restore the color of a border or outline to the computed foreground color once overridden; see my answer to this related question. While this question uses the word "inherit", it should be noted that specifying border-color: inherit
does not inherit from the color
property — like all other CSS properties, it inherits from the border-color
of the parent element.
1 The default is actually to invert the colors of the pixels underneath the outline, but supporting invert
is not mandatory and if a browser chooses not to, the foreground color must be used instead.