According to the manual
The Bump node generates a perturbed normal from a height texture,
for bump mapping. The height value will be sampled at the shading
point and two nearby points on the surface to determine the local
direction of the normal.
This makes sense if you think about it for a moment. The bump map cannot completely overwrite the original normal because the map image itself has no information about which way the normal is facing in 3 dimensions because it does not contain a 3d vector like a normal map does. It only contains height information, which Blender samples to get a direction vector which is combined with the original meshes normal vector to create the offset. That original mesh normal vector enters the Bump node via the unconnected Normal input, and is affected by shade smooth.
For example, if we sample the bump map and get a height of 20, then one unit* to the left we get a height of 25, and one unit up we get a height of 30, we can make three points: (0, 0, 20), (1, 0, 25),and (0, 1, 30) from which we can do a little linear algebra and come up with a direction vector like (-0.45, -0.89, 0.09) which is then combined the mesh normal to get the final vector. **
a = Vector( (0, 0, 20) )
b = Vector( (1, 0, 25) )
c = Vector( (0, 1, 30) )
To give an example, we take a default cube with a bevel modifier and setup a viewer (emission) material to show its normals:
It shouldn't be too surprising that the face pointing up is blue (RGB 0, 0, 1), the face pointing left is red (RGB 1, 0, 0) and the face pointing forward is green (RGB 0, 1, 0). Note the absolute vector node so we can see negative colors. We can also see magenta (RGB 0.5, 0, 0.5) and other colors on the bevels.
Now add in a checkerboard texture as a bump map:
And look the effect that has on the normals:
The areas where the checkerboard is solid white or solid black have the same normal values as the unbumped example. The only changes to the normals occur where there is a color transition. So in effect, the bump mapping node acts like a directed edge detector for its input image.
*unit is left a little vague here, a pixel on the UV map might seem ideal, but it really depends on how the object was unwrapped.
** disclaimer: I did not read Blenders code, this is based on general principles.