I'm not sure for 100% (can not always reproduce it) but I believe that buttons in a dynamically created panel (pan_create) are not visible if the bitmap assigned to the button is created dynamically with bmap_create.
All definitions in a programming language are evaluated at compile time. The compiler won't know which bmap you want to assign to your pointer at runtime.
This is why the manual states:
BMAPS USED IN ANY OBJECT DEFINITION MUST BE REAL BMAPS THAT ALREADY EXIST.
If you use bmap pointers, you'll get what they contain at compile time. If they contain NULL you won't see much of them at runtime.