I cross-compile packages for ARM box. Its filesystem is mounted in /mnt/usbstorage so I set PORTAGE_CONFIGROOT and ROOT variables to "/mnt/usbstorage". I've found that emerge doesn't use /mnt/usbstorage/etc/portage/package.keywords but /etc/portage/package.keywords. I've also found that package.use is used from /mnt/usbstorage/etc/portage! It's inconsistency! Reproducible: Always emerge --info: Portage 2.1.3.9 (!../usr/portage/profiles/default-linux/arm/2007.0, gcc-4.1.1, uclibc-0.9.28.3-r0, 2.6.21-suspend2-r6 i686) ================================================================= System uname: 2.6.21-suspend2-r6 i686 AMD Athlon(tm) Processor Timestamp of tree: Tue, 02 Oct 2007 16:50:01 +0000 distcc 2.18.3 i686-pc-linux-gnu (protocols 1 and 2) (default port 3632) [disabled] ccache version 2.4 [disabled] app-shells/bash: 3.2_p17 dev-java/java-config: 1.3.7, 2.0.33-r1 dev-lang/python: 2.4.4-r5 dev-python/pycrypto: 2.0.1-r6 dev-util/ccache: 2.4-r7 dev-util/confcache: 0.4.2-r1 sys-apps/baselayout: 1.12.9-r2 sys-apps/sandbox: 1.2.17 sys-devel/autoconf: 2.13, 2.61-r1 sys-devel/automake: 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2, 1.10 sys-devel/binutils: 2.17-r1 sys-devel/gcc-config: 1.3.16 sys-devel/libtool: 1.5.24 virtual/os-headers: 2.6.21 ACCEPT_KEYWORDS="arm" CBUILD="i686-pc-linux-gnu" CFLAGS="-Os -mtune=arm926ej-s -mcpu=arm926ej-s" CHOST="arm-gentoo-linux-gnu" CONFIG_PROTECT="/etc /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/X11/xkb /usr/share/config" CONFIG_PROTECT_MASK="/etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/revdep-rebuild /etc/terminfo /etc/texmf/web2c" CTARGET="arm-gentoo-linux-gnu" CXXFLAGS="-Os -mtune=arm926ej-s -mcpu=arm926ej-s" DISTDIR="/mnt/usbstorage/usr/portage/distfiles" FEATURES="buildpkg distlocks metadata-transfer sandbox sfperms strict" GENTOO_MIRRORS="http://distfiles.gentoo.org http://distro.ibiblio.org/pub/linux/distributions/gentoo" LANG="pl_PL" LC_ALL="pl_PL" LINGUAS="pl" MAKEOPTS="-j2" PKGDIR="/mnt/usbstorage/usr/portage/packages" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --filter=H_**/files/digest-*" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/mnt/usbstorage/usr/local/portage" SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage" USE="acl arm berkdb bitmap-fonts bzip2 cli cracklib crypt cups fbcon fbdev fortran iconv isdnlog midi mudflap ncurses nls nptl nptlonly openmp pam pcre perl ppds pppd python readline reflection session spl ssl tcpd truetype-fonts type1-fonts unicode xorg zlib" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol" ELIBC="glibc" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="pl" USERLAND="GNU" VIDEO_CARDS="fbdev" Unset: EMERGE_DEFAULT_OPTS, INSTALL_MASK, LDFLAGS, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
If you look at it more closely then I think you'll find that it uses /etc/portage/package.keywords for any build time dependencies that are pulled in for ROOT=/, and ${PORTAGE_CONFIGROOT}/etc/portage/package.keywords for anything that's actually pulled in for ROOT=/mnt/usbstorage. The same applies to package.use. The code that makes those relative to ${PORTAGE_CONFIGROOT} hasn't changed for a long time, and we'd have known by now if it wasn't working properly.
Please reopen if you can provide some evidence of incorrect behavior.