Do unconditional branches cause control hazards?
YES, unconditional jumps can cause a control hazard in a pipelined machine.


  we know with 100% certainly that B will be executed since an unconditional jump instruction A preceded it.


Well, we know, but the CPU does not know. 
I mean, the CPU does know that we need to jump to B, but only after the CPU decodes the jump instruction and realizes that the instruction is a jump (to B). Until that point thee CPU did not know it is about to jump and during that period it continued inserting other instructions to the pipe (not necessarily from B). 

When the CPU finds out it has a jump it is "too late": the pipe is already contaminated with other instructions.

In your example, the "contamination" is in fact the correct code, but in the general case it may a different code segment.