I believe that your problem may come from introducing the intermediate :modules. You may find that collecting the results of
(asdf::traverse (make-instance 'asdf:load-op) (find-system :foo))
Try rewriting your defsystem more along these lines:
(ASDF:DEFSYSTEM :FOO :COMPONENTS ((:FILE "foo")) (:FILE "bar" :depends-on ("foo")))
I will try to investigate this further (esp if you post a ticket to launchpad), but can't get to it for a while, so suggest you work around by revising the defsystem.
BTW, why is your system definition not in foo.asd?
best, r