見た限り、以下5点が気になりました。
①イベントを複数登録する場合、配列の形である必要があります。
kintone.events.on(
'app.record.create.change.支払日',
'app.record.edit.change.支払日',
function(event) {
↓
kintone.events.on([
'app.record.create.change.支払日',
'app.record.edit.change.支払日'
], function(event) {
②サブテーブル上のフィールドを参照する場合はevent.changes.rowです。
var changeRowDate = changes.row.value['支払日'].value;
↓
var changeRowDate = event.changes.row.value['支払日'].value;
③dateに代入しようとしているNowDateは宣言されていないようです。どこかで宣言されていますか?違う場合、非推奨ですがmoment.jsでは
var date = NowDate;
↓
var date = moment().format('YYYY-MM-DD');
このようになります。
④alertは選択肢が「OK」しかないお知らせになるので、今回の場合はconfirm(OKとキャンセルの2択)になるかと思います。
if(!(window.alert("支払日が本日ではありません。このまま保存しますか?") ) ){
↓
if(!confirm("支払日が本日ではありません。このまま保存しますか?")) {
⑤再度入力させるのであれば、対象のフィールドを空白にする必要があると思います(event.errorでフィールドの書き換えをキャンセルさせることができますが、今回の場合は「既に日付フィールドが変更された後のイベント」のため、event.errorでは空白にできません)。またevent.errorを入れると空白にする書き換えがキャンセルされるので、alert等で良いかと思います。
event.error = "キャンセルしました。";
↓
event.changes.row.value['支払日'].value = '';
alert('キャンセルしました');