Okay, loading your model in a program of my own, it very much looks like there’s a problem with the UV-map.
And indeed, I think that I may have found the problem!
If I convert your bam-file to an egg-file and open it up, I see that your UV-coordinates seem to have a name specified. (It’s the zero that comes after “<UV>” and before the first curly-bracket.)
If I remove this entirely from all UV-entries, then the UV-map seems to work.
Between this and a look at the egg-syntax page in the manual, I’m hypothesising that applying a name to a UV-map causes it to be used for a texture only if that texture specifies it by name as the UV-map to be used.
Now, when you export with a texture, this is, I imagine, set automatically.
But of course when you apply a texture in code, no such thing happens.
With the texture specifying no UV-map, the default is used. But since your only UV-map is named, it’s not the default UV-map, and so it’s not the one that’s used. Presumably in this case Panda falls back on a default UV-mapping of (0, 0) for all vertices, and this is what’s used.
As a result, rendering finds all of the object’s surface to map to approximately (0, 0), and whatever colour is located there is what ends up everywhere.