rpm-4.3.1-0.3 A --root --aid install to an empty root system fails because rpm looks for the rpmdb defined in %_solve_dbpath relative to --root instead of the source system. However %_solve_pkgsdir is interpreted as being relative to the source system. This is inconsistent, and it makes it necessary to install the rpmdb in the destination tree before one can proceed.
Suggestions from the outer root are not necessarily pertinent to a chroot contained in that root, e.g. the os may be a different version.
In case of a different version %_solve_pkgsdir is pointing to the wrong directory anyway. Thus you can just as well interprete %_solve_dbpath as being relative to the source system as well. This is inconsistent.
Let me explain a bit more. When doing a --root --aid install you draw your macros from /etc/rpm/ in the source system. Thus it is inconsitent to interpret one of the paths as being relative to the source system and the other as being relative to the destination system. In the case of installing a different version in the chroot both %_solve_pkgsdir and %_solve_dbpath need to be reset accordingly. Either you interprete both as relative to the source system (which is more maintainable) or both as relative to the destination system (in which case it would be more consistent to take the macros from /etc/rpm/ in the chroot anyway).
Override the macros on the command line using --define.
That still doesn't fix the inconsistency between rpm interpreting %_solve_dbpath as relative to the destination and %_solve_pkgsdir as relative to the source.