Read temperature using a Timer

have you considered a slightly simpler approach like this (uncompiled, untested):

// This #include statement was automatically added by the Particle IDE.
#include "DS18B20/Particle-OneWire.h"
#include "DS18B20/DS18B20.h"

// Globals
DS18B20 ds18b20 = DS18B20(D2); //Sets Pin D2 for Water Temp Sensor

int LED = D7; // pin for LED
int PIR = D3; //pin for PIR motion sensor

float pubTemp;
double celsius;
double fahrenheit;
const int Metric_Publish_Rate = 30000;
const int DS18B20_SAMPLE_INTERVAL = 2500;
unsigned long metricPublishTime = 0;
unsigned long tempSampleTime = 0;

volatile bool isrFlag = false;

int dsAttempts = 0;

Timer ledTimer(1000, blink_led);

// class Alarm {
//   public:
//     Alarm() {
//         Particle.function("alarm", &Alarm::alarm, this);
//     }
//     
//     int status;
// 
//     int alarm(String command) {
//         if(command == "reset"){
//             status = 0;
//         }
//         if(command == "panic"){
//             status = 1;
//         }
//         else {
//             status = -1;
//         }
//         return status;     
//     }
// };

void setup()
{
    Time.zone(-5);
    Particle.syncTime();
    Particle.variable("tempCelsius", &celsius, DOUBLE);
    Particle.variable("tempFahrenheit", &fahrenheit, DOUBLE);
    pinMode(LED, OUTPUT); // Use for a simple test of the led on or off by subscribing to a topical called led
    pinMode(PIR, INPUT_PULLUP); // Initialize pin as input with an internal pull-up resistor
    ledTimer.start();
    attachInterrupt(PIR, motion_detected, RISING);
    Serial.begin(9600);
}

void loop() 
{
    if (millis() - tempSampleTime > DS18B20_SAMPLE_INTERVAL)
    {
        getTemp();
        tempSampleTime = millis();
    }

    if (millis() -  metricPublishTime > Metric_Publish_Rate)
    {
        Serial.println("Publishing now.");
        publishData();
        metricPublishTime = millis();
    }
    
    if (isrFlag)
    {
      Particle.publish("photon/motion/detected", "1");
      isrFlag = false;
    }
}

void blink_led()
{
    digitalWrite(LED, !digitalRead(LED));
}

void motion_detected()
{
  isrFlag = true;
}

//void resetAlarm()
//{
//    Alarm alarm;
//    alarm.status = 0;
//}

//void raiseAlarm()
//{
//    Particle.publish("photon/motion/detected", "1");
//    resetAlarm();
//}

void publishData() 
{
    if(!ds18b20.crcCheck()){
        return;
    }
    Particle.publish("photon/temperature/celsius", String(celsius));
    Particle.publish("photon/temperature/fahrenheit", String(fahrenheit));
}

void getTemp()
{
    if(!ds18b20.search()){
        ds18b20.resetsearch();
        celsius = ds18b20.getTemperature();
        Serial.println(celsius);
        while (!ds18b20.crcCheck() && dsAttempts < 4){
            Serial.println("Caught bad value.");
            dsAttempts++;
            Serial.print("Attempts to Read: ");
            Serial.println(dsAttempts);
            if (dsAttempts == 3){
                delay(1000);
            }
            ds18b20.resetsearch();
            celsius = ds18b20.getTemperature();
            continue;
        }
        dsAttempts = 0;
        fahrenheit = ds18b20.convertToFahrenheit(celsius);
        Serial.println(fahrenheit);
    }
}