Currently, it's possible to choose a package from a lower priority repo due to REQUIRED_USE in a higher priority repo/package, even though the REQUIRED_USE could be satisfied by adjustment of USE. The user should be prompted to adjust USE for the higher priority repo/package, instead of choosing a lower priority repo/package (of the same or lower version).
This should prevent downgrades, but it still won't prevent it from pulling an identical cpv from a lower priority repo: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f85630c1c5d888be9fff35aff6461e2d9d16eb6e
Hopefully this fixes it, but I haven't written a test case yet: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=029ec2b89b7d55c68d89b6dff3dbe5539825e71a
It's fixed and has a test case here: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5fb13528549d4b47bd807b3824405a231e596549
This is fixed in 2.2.0_alpha13. A related fix are also in is also in 2.1.9.29: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=177a4ac82f3d2bef88dc1ac193373b6b6a23a953