Thank you for your response.
After a lot of searching, I have traced the issue. The problem appears to be in core/includes/customizer/styles.php. You have the following on line 385:
.boxed-layout
.content-area, body.default-layout #content-outer, body.full-width-layout #content-outer, body.full-width-no-box #content-outer, .menu, #footer {
width: {$container_width}px;
max-width: 100%;
}
The layout has a div with id content-outer and the body has the default-layout class. This rule is therefore triggered, setting the div to container_width and forcing the page to (in my case) 960 pixels wide. When you scroll the page the resize event fires, resulting in the code in core/js/responsive-scripts-min.js deciding that the screen is more than responsives.break_point wide and therefore setting the menu to display.
I have fixed the issue by adding custom CSS that sets the width of these elements to 100% if the screen is 959px or less wide (container_width being 960px for my site).
However, I was wrong about the latest version of your theme fixing the disappearing menu. This can still be observed on staging.rhdra.org which is using the Responsive theme. It works fine on PCs and on mobile emulators. However, on an actual mobile device the menu appears when you touch the hamburger but generally disappears when you try to scroll the menu (although sometimes it scrolls correctly). You then have to touch the hamburger twice to get it to reappear, so the site obviously thinks the menu is still present. Any thoughts on how this can be fixed would be much appreciated.