The figure searching code gets confused if a file of the same basename (but in a different directory) has already been loaded.
Looking a bit into this, it seems that the decision about whether a figure is already loaded is made in core-fig.tex, in \def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]% ... \ifcase\figurestatus \let\@@efframe\v!on \let\@@efobject\v!no \showmessage\m!figures1\@@effilename \or \showmessage\m!figures2\@@effullname \or \showmessage\m!figures3{\@@effullname,\@@eflenttype}% \or \showmessage\m!figures4\@@effullname \or \showmessage\m!figures5{\@@effullname,\@@efloadname}% \or % no message \doifnot\@@efsymbol\v!yes{\showmessage\m!figures8\@@effullname}% \fi ... The "no message" comment suggests that when \figurestatus isn't set, the message shown is figures8, which is 8: figureobject -- is reused But I couldn't figure out who sets \figurestatus and where the judgement of 'already loaded' is made. The comment at the beginning of the above \def ("this whole mess needs a clean up anyway") scared me away :-) -Sanjoy `Never underestimate the evil of which men of power are capable.' --Bertrand Russell, _War Crimes in Vietnam_, chapter 1.