こんな感じの予定表を定義します。
で、細かい話はおいといて、アイテムを追加します。
タイトル t2 が、終日のイベントとして登録しています。
入力したデータは以下の通りです。
追加直後のDBの中身はこんな感じです。

データは、コンテンツDB(WSS_Content) の AllUserData テーブルに保存されています。
終日をオンにすると、datetime1とdatetime2 はローカル時刻で、それ以外はUTC時刻で保存さています。
#これが問題の始まりのような気がしますw
SharePointの列とDBの列の対応は以下の通りです。
| SharePoint | DB |
| タイトル | nvarchar1 |
| dt1 | datetime4 |
| 開始時刻 | datetime1 |
| 終了時刻 | datetime2 |
| 終日 | bit1 |
| 作成日時 | tp_Created |
| 更新日時 | tp_Modified |
それで問題になるのはここから。
2つのアイテムをEditForm.aspxで開くと以下のように表示されます。
終日がオンのアイテムの dt1 の値が9時間マイナスされています。
で、何もせずに保存します。
それで DB の方も見てみると。。。
datetime4 を見ると、UTC時刻で保存されています。
ただEditForm.aspxで開いて何もせずに保存するだけで dt1 がマイナス9時間されてしまいました。
どうやら読み込み時に、終日がオンになっていると datetime1~datetime8 をローカル時刻として読み込んでしまうようです。
#日時を扱うコントロール(多分、Microsoft.SharePoint.WebControls.DateTimeControl)の使い方がおかしいのかなぁ
また、SharePoint Designer でデータソースを使うと、終日がオンの場合は日付型のデータがDBの値から一律マイナス9時間されるみたいですね。
これも同じことに起因しているのではないでしょうか?
例えば、全部のデータをUTC時刻に統一しようとしているとか。ま、それでも動作はおかしいですけど。
Reflector を使って Microsoft.SharePoint.dll のソースを見ましたが、
Microsoft.SharePoint.WebControls.DateTimeControl.SelectedDate のソースおかしくないですか?