最初の実装がeq.1です。
a, b 共に内部表現は(1111 1111)ですから暗黙の型変換がされても
評価式は真になる(←ここがダウト)とものと思い込んでいました。
暗黙の型変換では『両方の値を不足無く表現できる符号付きの型に合わせる』らしいです。
この場合,左辺が(char) 0xff → -1,右辺が(BYTE) 0xff → 255ですから
char の一つ上,両者を表現できる signed int に合わせて比較されることになります。
つまり実際のところ,eq.1は暗黙の型変換によってeq.2として評価されていたのでした。
タネを明かせば何のことはないのですが10分ばかし頭を抱えてしまいました。
長年やってきて恥ずかしいバグです。
対策を挙げるとすればeq.3またはeq.4となります。 今回,a が UDP パケットのバイトデータだったので 変数の意味を考えれば a は BYTE 型で宣言し直すのが筋かもしれません。