The Scheduler needs to read its own dimensions after rendering in order to render the current viewport. This isn't possible if the Scheduler is in a hidden area of a page (e.g. in a <div> with display:none style). It includes a routine that detects when the Scheduler becomes visible and refreshes the viewport but it looks like it fails in case of the modal dialog (the modal dialog uses an iframe to display the content).
You can force the viewport to be rendered by calling dp.show(). In this case, you may need to execute it after a delay using setTimeout():
<script>
var dp = new DayPilot.Scheduler("dp");
// config ...
dp.init();
var timeout = 200;
setTimeout(function() {
dp.show();
}, 200);
</script>
It's a workaround but the iframe can be tricky so it might be the most reliable way after all. You can tweak the timeout value to see what works best. You might also be able to replace the setTimeout with some kind of "onload" event (jQuery ready(), etc.).