Полагаю, вы видите диалоговое окно всегда, а не один раз на пользователя.
$(document).ready(function(){
$("#dialog").dialog({
modal: true
});
В этой части диалоговое окно будет отображено немедленно, еще до того, как вы дойдете до проверки на показ.
Вы должны избавиться от него и переместить ваш модальный параметр в блок if:
<script type="text/javascript">
// <![CDATA[
$(document).ready(function(){
$(function() {
if ($.cookie('shownDialog') != 'true') {
$("#dialog").dialog({
modal: true
});
}
$.cookie('shownDialog', 'true', {expires: 7});
});
$("#close").click(function(event) {
event.preventDefault();
$(this).closest(":ui-dialog").dialog("close");
});
});
// ]]>
</script>