Welcome to floating point hell ;)
Mathematica stores numbers like 13.1441 in machine precision, this is an inexact way to represent numbers so strange things happen:
0.3 + 0.04 // FullForm
0.34 // FullForm
0.34 + 0.1 - 0.1 //FullForm
0.33999999999999997`
0.34`
0.3400000000000001`
Cases looks for things that matches exactly, and b doesn't exactly match 0.34, that is why it fails.
The == operator allows for a bit of machine error, so this wil work as expected:
Cases[Q, {x_, y_ /; y == b, z_}]
(* However this will not: *)
Cases[{2.00006 - 2.00005}, n_ /; n == 0.00001]
You can check the
Basics of Numeric Computation for an overveiw of inexact and exact numbers