ReadFile(hComPort,ch,1,BytesRead,@Ovr) -> FALSE это обычное дело.
Надо проверить GetLastError().
Должен быть код возврата:
//
// MessageId: ERROR_IO_PENDING
//
// MessageText:
//
// Overlapped I/O operation is in progress.
//
#define ERROR_IO_PENDING 997L // dderror
А данные реально будут получены после взвода
события в структуре Ovr.