I am also a novice on RichFaces. But I think I can answer your question.
The keypoint is that the RichFaces will refresh the page content by Ajax. In other word, the new response from server will first scan the DOM tree. When it finds the mark of component in DOM tree, it will refresh the content of component.
In you case, when the page first time loaded from server to the browser, due to the 'render' attribute of 'mypanel' is 'false', there isn't any corresponding content about 'mypanel' rendered to page. After clicking the button, the 'render' attribute of 'mypanel' is set to 'true'. When the new response sent to browser, the browser failed to find the mark of 'mypanel' in DOM tree. Therefore, no change will be shown on the page.
To solve this problem, the recommended method is to place the component (which attribute is 'false' initially) into a container componet. And try to reRender this component every time.
Since this container will be rendered every time. When the new response sent to browser, the browser will be able to find the 'mypanel' successfully.
Just like following, very simple:
You can also use the <rich:panel> or other container component instead <h:panel>.